【问题标题】:How to print last element in set in C++如何在 C++ 中打印集合中的最后一个元素
【发布时间】:2020-09-12 06:02:05
【问题描述】:

我正在尝试打印集合 set<int>s; 的最后一个元素,其中实际最后一个元素是 9。

set<int>:: iterator it=s.begin();
while(it!=s.end())
{
    cout<<*it<<endl;
    it++;
}

当我使用这个循环时,通过这个集合,它表明最后一个元素是 9,这是正确的。

但是当使用这段代码时,它显示最后一个元素是 4,这是不正确的。

int setint= *s.end();
cout<<setint<<endl;

但是当我使用此代码打印集合的第一个元素时,它会正确打印第一个元素

int setint= *s.begin();
    cout<<setint<<endl;

我该怎么办?

【问题讨论】:

  • end() 将一个不可解引用的迭代器返回到一个虚构元素,该元素位于实际最后一个元素之后的一个位置。递减它以使迭代器到达最后一个元素。
  • 请阅读end()方法的文档。
  • 如果你仔细观察你的第一个 sn-p,你会发现 it == s.end() 没有执行 while 循环,最后一次迭代是 s.end() 之前的元素
  • 库中的所有区间都是半开的,由开头和结尾指定。

标签: c++ stl iterator set


【解决方案1】:

end 实际上是“指向”集合内容之外的一个元素:

你应该使用反向迭代器:

https://en.cppreference.com/w/cpp/container/set/rbegin

if (!mySet.empty())
{
    std::cout << "Last element is: " << *mySet.rbegin() << std::endl; 
}

【讨论】:

    【解决方案2】:

    end() 指向集合的结束。它永远不应该被取消引用。

    您可以改用rbegin()

    if (!myset.empty()) {
        cout << *myset.rbegin() << endl;
    }
    

    【讨论】:

      猜你喜欢
      • 2022-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-06
      • 2011-04-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      相关资源
      最近更新 更多