本文最后更新于:2022年6月8日 晚上
标准 https://en.cppreference.com/w/cpp/algorithm/copy
示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 #include <iostream> #include <vector> #include <string> template <class T >void print (T &vecs) { std::cout << "vecs->size:" <<vecs.size () << "\t data:" ; for (auto & v : vecs) std::cout << v << " " ; std::cout << std::endl; }int main () { std::vector<char > vecs{'A' ,'B' ,'C' ,'D' ,'E' ,'F' ,'G' ,'H' ,'I' }; std::vector<char > tmp; tmp.resize (vecs.size () * 10 ); print<std::vector<char >>(vecs); std::copy (vecs.begin (),vecs.end (),tmp.begin ()); std::copy (vecs.begin (),vecs.end (),tmp.begin () + vecs.size ()); std::copy (vecs.begin (),vecs.end (),tmp.begin () + vecs.size () + 1 ); print<std::vector<char >>(tmp); int64_t valA = 0x123456789 ; std::vector<uint8_t > tmpA; tmpA.resize (sizeof (valA)); std::copy ((uint8_t *)&valA, (uint8_t *)&valA + sizeof (valA), tmpA.begin ()); print (tmpA); for (auto v: tmpA) printf ("%x " ,v); std::cout << std::endl; return 0 ; }
1 2 3 4 5 6 7 8 9 10 # 将上述代码保存为test.cpp ,使用以下命令编译、执行 g++ test.cpp -std=c++11 ./a.out# 得到结果,与预期一致 u@ubuntu:~$ ./a.out vecs-> size:9 data:A B C D E F G H I vecs-> size:90 data:A B C D E F G H I A A B C D E F G H I vecs-> size:8 data:� g E 89 67 45 23 1 0 0 0
总结 在使用过程中 copy 有三个参数,分别是待拷贝的数据开始迭代器、待拷贝的数据的结束迭代器、目的迭代器
其中如果要拷贝非STL中数据,根据目的迭代器的存储类型,将源数据 转成对应的指针形式访问内存 ,比如上述代码中的
std::copy((uint8_t *)&valA, (uint8_t *)&valA + sizeof(valA), tmpA.begin());