我有一个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::copy
和 std::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/