代码之家  ›  专栏  ›  技术社区  ›  Lin Ma

来自C++多集下限的意外输出

  •  1
  • Lin Ma  · 技术社区  · 7 年前

    1 ? 我从不插入 进入 multiset 容器

    #include <iostream>
    #include <set>
    
    int main ()
    {
      std::multiset<int> mymultiset;
      std::multiset<int>::iterator itlow;
    
      mymultiset.insert(-3);
      itlow = mymultiset.lower_bound (3);
      std::cout << *itlow << endl; // output 1
    
      return 0;
    }
    
    3 回复  |  直到 7 年前
        1
  •  4
  •   Pete Becker    7 年前

    mymultiset.lower_bound(3) 返回容器中的最低位置,其中 3 可以走了,就在容器的末尾。所以 itlow mymultiset.end() ,并且它不可解引用。 std::cout << *itlow

        2
  •  2
  •   Yinon    7 年前

    您试图得到一个迭代器,其下限为3,最大值为-3。这里有一个末端迭代器,它的值是未定义的。 你应该使用 multiset::begin() itlow = mymultiset.lower_bound (-4); 这不是很温和。

        3
  •  0
  •   hago    4 年前

    嗨,澄清我的理解

    mset.insert(1);
    mset.insert(5);
    auto it = s.lower_bound(6);
    cout<<*it<<endl;
    

    现在,从上面的答案中,我将得到2,因为这是值6可以放入容器中的位置。我说得对吗?

    接下来,如果我搜索值4,我得到5。 我说得对吗?

    谢谢