C++标准库中copy算法的使用
目录
std::copy是C++标准库中的算法接口,主要用于两个容器间的复制,据说其效率要优于自己用for循环逐个复制。之前一直非常混淆其中的用法,这里总结了几个例子如下:
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
using namespace std;
int main()
{
//vector复制到vector
{
vector<int> src = { 0, 1, 2, 3, 4 };
vector<int> dst(8, -1);
std::copy(src.begin(), src.end(), dst.begin());
for (int i = 0; i < dst.size(); i++)
{
cout << dst[i] << '\t';
}
cout << endl;
}
//vector插入到vector末尾
{
vector<int> src = { 0, 1, 2, 3, 4 };
vector<int> dst = { -10, -9 };
std::copy(src.begin(), src.end(), std::back_inserter(dst));
for (int i = 0; i < dst.size(); i++)
{
cout << dst[i] << '\t';
}
cout << endl;
}
//set插入到vector
{
set<int> src = { 4, 3, 2, 1, 0 };
vector<int> dst;
std::copy(src.begin(), src.end(), std::back_inserter(dst));
for (int i = 0; i < dst.size(); i++)
{
cout << dst[i] << '\t';
}
cout << endl;
}
//数组插入到vector
{
int src[5] = { 0, 1, 2, 3, 4 };
vector<int> dst;
std::copy(src, src+5, std::back_inserter(dst));
for (int i = 0; i < dst.size(); i++)
{
cout << dst[i] << '\t';
}
cout << endl;
}
//vector插入到数组
{
vector<int> src = { 0, 1, 2, 3, 4 };
int dst[8] = { -1 };
std::copy(src.begin(), src.end(), dst);
for (int i = 0; i < 8; i++)
{
cout << dst[i] << '\t';
}
cout << endl;
}
//数组插入到数组
{
int src[5] = { 0, 1, 2, 3, 4 };
int dst[8] = { -1 };
std::copy(src, src + 5, dst);
for (int i = 0; i < 8; i++)
{
cout << dst[i] << '\t';
}
cout << endl;
}
}
这个例子虽然繁复,但是确实表达了STL算法(algorithms)接口的原则:STL算法不负责空间申请操作,只负责相应行为,接口中容器的大小应该预先申请好。但是,这里有的例子用到了std::back_inserter,也就是插入迭代器,会将元素自动插入到支持push_back的容器后面,看起来似乎破坏了这个原则。这也是我之前为什么搞混淆的原因。看来这个问题有机会还需进一步深究。
最后的运行结果如下:

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)