stl::vector拷贝性能分析
--本文为个人理解,如有错误,请批评指正
标准库stl::vector拷贝有几种方式:
① for(int i=0;i<v1.size();++i) {v1[i]=v2[i];} //法1,一个一个元素的复制
② v1.assign(v2.begin(), v2.end()); // 法2,使用assign()函数进行复制
③ v1=v2; // 法3,使用=(拷贝构造函数)进行复制;另外,‘=’运算符的说明可以从这里看:vector::operator= - C++ Reference (cplusplus.com)
结论:
“=”最快,一个一个元素拷贝次之,assign()最慢;
实验:
#include <iostream> #include<vector> using namespace std; volatile clock_t startt, endt;int main() { vector<int> v1{ 4,5,6 }; cout << "v1.cap=" <<v1.capacity()<< endl; vector<int> v2{ 4,5,6,6,7 ,8,4,7,4,9}; v1.assign(v2.begin(), v2.end()); // 法一,一个一个元素的复制 startt = clock(); for (int i = 0; i < 100000; i++) { for (int i = 0; i < v1.size(); ++i) { v1[i] = v2[i]; } } endt = clock(); cout << "count=" << (endt - startt) << "ms" << endl; // 法2,使用assign()函数进行复制 startt = clock(); for (int i = 0; i < 100000; i++) { v1.assign(v2.begin(), v2.end()); } endt = clock(); cout << "count=" << (endt - startt) <<"ms"<< endl; // 法3,使用=(拷贝构造函数)进行复制 startt = clock(); for (int i = 0; i < 100000; i++) { v1=v2; } endt = clock(); cout << "count=" << (endt - startt) << "ms" << endl; }
输出结果:
法1耗时:88ms
法2耗时:123ms
法3耗时:53ms
结论:
“=”最快,一个一个元素拷贝次之,assign()最慢;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?