c++ - 如何使用存储在列表中的特定范围的元素初始化 vector ?

标签 c++ list vector initialization

我有一个list 和一个vector:

list<int> l;
for(int i=0; i<10; i++)
    l.push_back(i);

vector<int> v;

我想使用 l 中的前 5 个元素初始化 v,在本例中为 {0,1,2,3,4}.

除了for循环加上v.push_back,还有别的办法吗? memcpy 还是 copy

PS:我目前没有使用C++0x/C++11

最佳答案

can使用 std::copystd::advance (而不是 + ,对于非随机访问迭代器):

#include <list>
#include <vector>
#include <iterator>
#include <algorithm>

int main() {
   std::list<int> l;
   for (int i = 0; i < 10; i++)
       l.push_back(i);

   std::vector<int> v;
   v.reserve(5);

   std::list<int>::iterator start = l.begin(), end = start;
   std::advance(end, 5);
   std::copy(start, end, std::back_inserter(v));

   std::cout << v.size();   // 5
}

advance但是,由于 std::list<> 的性质,它是“慢”的;这就是为什么 op+不适用于 std::list<>::iterator .

关于c++ - 如何使用存储在列表中的特定范围的元素初始化 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9191984/

相关文章:

c++ - 为什么我的代码不显示我的 TButton 数组?

c++ - DEFPUSHBUTTON 不将焦点默认为 IDCANCEL

c++ - 在 C++ 中对 vector 进行分组排序

c++ - 尝试将 vector 与 SFML 一起使用

c++ - 将 make_move_iterator 与 vector::insert 一起应用是否有意义?(C++)

c++ - 为什么 LLVM 的 Optional<T> 是这样实现的?

c++ - O(1) 中 unordered_set 中的随机元素

java - Java中如何从一个列表中删除一个元素,同时将其添加到另一个列表中?

python - 过滤掉不在组件列表中的描述

java - Hibernate列表映射问题