【C++】41. std::copy和assign的用法
对于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
即可完成这个功能。
【C++】41. std::copy和assign的用法相关推荐
- JavaScript 中 Object.assign() 的用法
目录 1. Object.assign()对象的拷贝 2. Object.assign()对象的深拷贝 3. 对象的合并 4. 合并具有相同属性的对象 5. 继承属性和不可枚举属性是不能拷贝 6. 原 ...
- std::copy性能分析与memmove机器级实现
复制数据的快速方法std::copy C++复制数据各种方法大家都会,很多时候我们都会用到std::copy这个STL函数,这个效率确实很不错,比我们一个一个元素复制或者用迭代器复制都来的要快很多. ...
- [转]thinkphp 模板显示display和assign的用法
thinkphp 模板显示display和assign的用法 $this->assign('name',$value); //在 Action 类里面使用 assign 方法对模板变量赋值,无论 ...
- retain和copy还有assign的区别
retain和copy还有assign的区别 1. 假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b.此时a和b ...
- std::ostream_iterator、std::cout、std:copy实现输出
如下: std::vector<int> myvector(10);/* std::iota算法功能是从0每次自增1直至将myvector中的10个元素填满故现在myvector中的元素为 ...
- std::copy与memcpy比较
目录 比较 例子 不适用std::copy却适用memcpy的场景 适用std::copy不适用memcpy的场景 比较 std::copy和memcpy都可以用于内存块之间的复制操作,但有几个重要的 ...
- ES6 Object.assign()的用法
1.Object.assign()基本用法: Object.assign方法用来将源对象(source)的所有可枚举属性,复制到目标对象(target).它至少需要两个对象作为参数,第一个参数是目标对 ...
- std::enable_if 的几种用法
https://yixinglu.gitlab.io/enable_if.html std::enable_if 的几种用法 tech 12cpp 2 std::enable_if 顾名思义,满足条件 ...
- copy, retain, assign , readonly , readwrite,strong,weak,nonatomic整理
copy:建立一个索引计数为1的对象,然后释放旧对象 对NSString 对NSString 它指出,在赋值时使用传入值的一份拷贝.拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协 ...
最新文章
- OceanBase迁移服务:向分布式架构升级的直接路径
- java后期发展方向_2020年前3季度工程自卸车市场咋样?后期朝啥方向发展?
- 如何让springboot中的某些html文件不经过thymeleaf模板解析?
- 会议交流 | 第十五届全国知识图谱与语义计算大会(CCKS 2021)12月25日线上召开...
- (97)Verilog HDL:秒灯设计
- 运维实战案例之“Too many open files”错误与解决方法
- SDUT 2482 二叉排序树
- 用python开发文本翻译小软件
- ulead gif animator 5.11中文破解版|ulead gif animator绿色中文破解版下载 v5.11
- matlab倒立摆不同初始条件,倒立摆MATLAB建模
- HTML作业制作服装推广软文,盘点:服装推广软文写作技巧
- java digester_使用digester解析XML配置文件
- win11安装更新错误0x800f081f怎么解决?
- 自定义 UINavigationController
- 从千牛产品策略看电商客服接待场景
- mongoDB使用及简单命令(忘记了密码怎么办、mongoDB密码重置、创建数据库、mongoDB启动停止)
- 常见的机器学习数据挖掘知识点
- 安卓-橡皮擦擦线完整实现
- 上海航芯| BMS专题之BMS基础功能模块概述分享
- R和pandas实现透视表(pivot; cast/dcast/acast)和逆透视表(melt)过程