在离开它十年后我回到了c ++。
我试图获取列表的最后5项并对其进行排序。这是我到目前为止的代码。
int myints[] = {32,55,34,22,33,55,22};
std::list<int> mylist(myints, myints+7);
std::vector<int> myvector2(mylist.end() - 5, mylist.end());
std::sort(myvector2.begin(), myvector2.end());
但是我收到以下错误。
invalid operands to binary expression ('iterator' (aka '__list_iterator<int, void *>') and 'int')
我做错了什么?有没有更好的方法来做到这一点。
答案 0 :(得分:4)
您的代码会显示您的知识年龄。从C ++ 11开始,您已经能够更直接地初始化容器了:
std::list<int> mylist{32,55,34,22,33,55,22};
对于您实际问的问题,我会使用prev
:
std::vector<int> myvector2(std::prev(mylist.end(), 5), mylist.end());
您也可以使用std::advance
,但它不会返回它产生的值,因此使用它通常有些笨拙:
auto pos = mylist.end();
std::advance(pos, -5);
std::vector<int> myvector2(pos, mylist.end());
作为最后一点,我建议几乎任何使用std::list
都应该被视为“有罪直到被证明是无辜的”。它很少非常有用 - 即使在专门设计用于突出其(假定的)优势的情况下,std:vector
经常会更快地结束。