将列表的一部分复制到 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
通常也会更快地结束。
我在离开 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
通常也会更快地结束。