对于std::copy
的用法,可以参考 https://blog.csdn.net/a_ran/article/details/17385911,我这里直接介绍对于std::vector
来说std::copy
和assign
的用法。
std::vector
和std::string
有个assign()
成员函数,用于拷贝、赋值操作,它们允许我们顺次地把一个std::vector
或std::string
对象的部分内容
拷贝到另一个std::vector
或std::string
对象上。
当需要把一个vector对象的元素添加到另一个vector对象中时,可以有两种方法:
std::vector<int> vct1 = {1,2,3,4,5,6};
std::vector<int> vct2;
// 方法1:使用assign
vct2.assign(vct1.begin(), vct1.end());
// 方法1:使用std::copy
std::copy(vct1.begin(), vct1.end(),
std::back_inserter(vct2));
std::cout << "A处: ";
for (auto v : vct2) {
std::cout << v << ", ";
}
vct2.assign(vct1.begin(), vct1.end());
std::cout << "B处: ";
for (auto v : vct2) {
std::cout << v << ", ";
}
但是在多次添加时,使用std::copy
就很方便了。如:把vct1
和vct2
都添加进vct3
中:
std::vector<int> vct1 = {1,2,3,4,5,6};
std::vector<int> vct2 = {7,8,9};
std::vector<int> vct3;
std::copy(vct1.begin(), vct1.end(), std::back_inserter(vct3));
std::copy(vct2.begin(), vct2.end(), std::back_inserter(vct3));
for (auto v : vct3) {
std::cout << v << ", ";
}
输出结果:
如果想使用assign
就做不了,而只能使用一次assign
把vct1添加进vct3中,后面的vct2
就必须使用for
遍历vct2
的每个元素,然后一个一个push_back
进vct3
中。使用std::copy
就很方便了,调用两次std::copy
即可完成这个功能。