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

copying part of a list to a vector in C++

我在离开 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')

我做错了什么?有没有更好的方法呢。

您的代码显示了您的知识年龄。从 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,但它不会 return 它产生的值,因此使用起来通常有些笨拙:

auto pos = mylist.end();
std::advance(pos, -5);
std::vector<int> myvector2(pos, mylist.end());

最后一点,我建议几乎 任何 std::list 的使用都应视为 "guilty until proven innocent"。它 很少 有用——即使在专门设计来突出其(假设的)优势的情况下,std:vector 通常也会更快地结束。