相关疑难解决方法(0)

如何在std :: set <int>中找到最大的int?

我有一个std::set<int>,找到这个集合中最大的int的正确方法是什么?

c++ stl stdset

58
推荐指数
4
解决办法
3万
查看次数

c ++ stl base()做什么

我有这样的代码:

vector <int> v;
for (int i=0; i<5; i++)
        v.push_back(i);
v.erase(find(v.rbegin(), v.rend(),2).base());
Run Code Online (Sandbox Code Playgroud)

该代码在第一次检测到2之后从向量v中删除第一个元素(在向量中保留:0 1 2 4)..base()在这做什么?

c++ vector erase

22
推荐指数
2
解决办法
7798
查看次数

为什么我不能减少std :: array :: end()?

我正在display()为容器类型创建一个方便的函数模板.最后一个元素的输出与其余元素不同,因此我检查何时myIterator != --cont.cend();.这适用于std::vector,但不适用std::array.为什么?

这是一个MWE(不是我的实际代码):

std::vector<double> vec({1,2});
std::array<double, 2> arr({{1,2}});
auto vecIt = --vec.end(); // OK
auto arrIt = --arr.end(); // error: lvalue required as decrement operand
Run Code Online (Sandbox Code Playgroud)

c++ iterator language-lawyer stdarray

8
推荐指数
3
解决办法
495
查看次数

获取对std :: list中最后两个元素的引用

我需要最后两个元素的别名std::list.最后一个是easy(.back()),但我应该如何获得它之前的那个?

我的第一个想法是:在最后一个元素(.end())之后获取一个迭代器,并将它向左移动两次.以下是我"制作"的内容:

&last_but_one = *----myList.end(),
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但我个人觉得它有点混淆,如果我在别人的代码1中看到它,我认为我不会轻易解析它.

通过这个答案阅读其他一些(太)详细的方法2:

auto iter = n.end();
std::advance(iter, -2);
&last_but_one = *iter; // this is overkill!

// weird, and the .next() variant even more
&last_but_one = *std::prev(std::prev(n.end())); 

&last_but_one = *++myList.rbegin(); // similar to *----myList.end()
Run Code Online (Sandbox Code Playgroud)

这是首选的方式?

1我可以发表评论,但代码应该是不言自明的.
2可能更慢更复杂,这不应该是选择的主要原因

c++ iterator stl reference c++11

4
推荐指数
1
解决办法
596
查看次数

标签 统计

c++ ×4

iterator ×2

stl ×2

c++11 ×1

erase ×1

language-lawyer ×1

reference ×1

stdarray ×1

stdset ×1

vector ×1