copy()可用于初始化容器吗?以下代码有一个运行时错误:“list iterator not dereferencable”。这是什么原因?感谢
string a[] = {"00", "11", "22"};
list<string> list_1(a, a+3), list_2;
copy(list_1.begin(), list_1.end(), list_2.begin()); // error:
答案 0 :(得分:3)
list_2
没有空间来复制源范围。您必须保留足够的空间,或使用插入器迭代器。或者,您可以使用list
构造函数:
std::list< std::string > list_2( list_1.begin(), list_1.end() );
或assign
成员函数:
list_2.assign( list_1.begin(), list_1.end() );
答案 1 :(得分:2)
<子> 子>
string a[] = {"00", "11", "22"};
list<string> list_1(a, a+3);
许多选择:
// #include <iterator>
list<string> list_2;
copy(list_1.begin(), list_1.end(), std::back_inserter(list_2));
或
list<string> list_2(list_1.begin(), list_1.end()); // range ctor
或
list<string> list_2(list_1); // copy ctor
甚至:
list<string> list_2;
list_2.assign(list_1.begin(), list_1.end()); // range assignment
或:
list_2.insert(list_2.end(), list_1.begin(), list_1.end()); // range insert
或:
vector<string> vec(list_1.size()); // pre-allocating ctor
copy(list_1.begin(), list_1.end(), vec.begin());
或:
vector<string> vec;
// ....
vec.clear();
vec.resize(list_1.size()); // pre-allocate existing vector
copy(list_1.begin(), list_1.end(), vec.begin());
可能性是......无穷无尽的
答案 2 :(得分:1)
您需要back_insert_iterator
来自std::back_inserter
,而不是来自list_2.begin
的迭代器。后者不为copy
试图插入的项目分配内存。