让我用一个简化的例子向您展示。
std::vector<int> v = {1, 2, 3};
std::vector<int> v1;
std::copy(v.begin(), v.end(), std::back_inserter(v1));
在这种情况下,如预期的那样,v1 将是 1, 2, 3。现在考虑一下:
std::vector<int> v = {1, 2, 3};
std::vector<int> v1(3); //v1 has initial size!!
std::copy(v.begin(), v.end(), std::back_inserter(v1));
现在 v1 将是 0, 0, 0, 1, 2, 3,因为back_inserter
push_back
s。如果您已经在目标中分配了必要的大小,则使用begin()
迭代器而不是back_insert_iterator
:
std::vector<int> v = {1, 2, 3};
std::vector<int> v1(3); //v1 has initial size!!
std::copy(v.begin(), v.end(), v1.begin()); //use begin here
正如预期的那样,v1 是 1, 2, 3。