将部分列表复制到C ++中的向量

时间:2017-10-26 16:14:58

标签: c++ std

在离开它十年后我回到了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')

我做错了什么?有没有更好的方法来做到这一点。

1 个答案:

答案 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经常会更快地结束。