容器拷贝
来源:互联网 发布:全途进销存发货软件 编辑:程序博客网 时间:2024/06/08 05:06
在容器的初始化和赋值时常常会对另一个容器(或部分容器)进行拷贝
下面就来讨论下容器拷贝时的一些规则
容器的定义及初始化
有以下几种方式(并不全是拷贝)
- 默认构造函数
Container c; //如果Container是array,则按元素默认值初始化;否则c为空
- 指定大小的构造函数
Container seq(n); //n个元素,默认值初始化Container seq(n,t); //n个元素,值都是t
- 容器整体拷贝
Container c1(c2); // c1是c2的拷贝Container c1 = c2; //其中 c1与c2必须是相同类型(容器类型相同且元素类型相同)
- initializer_list拷贝
Container c{a,b,c,d}; //列表中的元素必须与Container中元素的类型相容Container c = {a,b,c,d}; //元素类型不要求相同,可以转换即可(相容)
- 迭代器范围拷贝
Container c(b,e); //b,e是两个迭代器,构成一个 容器的范围 //b,e中的元素与Container中元素类型相容即可
容器拷贝的3种方式
从上面知道,在容器创建的初始化阶段有3种拷贝初始化方式
容器整体拷贝
要求接收容器和被拷贝容器类型完全相同(包括容器类型及元素类型),如果是array则大小也要求相同。
迭代器范围拷贝
仅要求接受容器和被拷贝容器的元素类型相容,array不支持此种拷贝方式。
初始化列表拷贝
仅要求接受容器和被拷贝容器的元素类型相容。
assign
在对容器进行整体赋值(非初始化)时,仅可以进行 容器整体拷贝 (这对容器类型及元素类型有很高的要求)及 初始化列表拷贝(无法拷贝自另一个容器)。
如果我们仍需要像初始化时那样用迭代器范围拷贝不必在意容器类型的话,可以使用assign函数。
list<string> names;vector<const char*> oldstyle;names = oldstyle; //错误,容器类型不匹配names.assign(oldstyle.begin(),oldsyle.end()); //正确,可以将const char* 转换为 string
- assign还可以接受一个整型值和一个元素值
names.assign(10,"hello"); //容器names中有10个hello
- 接受一个初始化列表
names.assign({"hello","world","hello","cpp"});//注意加上{}才是一个初始化列表
assign的作用就相当于对象再次“初始化”
阅读全文
0 0
- 容器拷贝
- 容器的值拷贝语意
- 顺序容器之间的拷贝
- STL容器使用中的拷贝成本
- STL容器与拷贝构造函数
- Quick-Cocos2d-x UI容器项拷贝
- STL容器与拷贝构造函数
- 容器对象的深拷贝方法
- C++容器的拷贝注意细节
- Docker容器内外互相拷贝文件
- docker容器内外进行数据拷贝
- Docker容器内外互相拷贝文件
- STL容器的拷贝构造和赋值特性
- 如何使用memcpy向容器里拷贝数据
- 节点拷贝解决C容器扩展复杂度问题
- 容器中对象拷贝的正确性与高效性
- STL容器与默认拷贝构造函数,默认赋值函数
- 如何在Docker容器内外互相拷贝数据?
- 关于UITableView截屏功能的实现
- 5.链栈
- python切片的使用及复制列表和给列表赋值
- 基础练习 十进制转十六进制
- Android Thermal
- 容器拷贝
- xadmin下设置“use_bootswatch = True”无效的原因
- java json字符串转JSONObject和JSONArray以及取值
- idea-svn,idea-maven
- rand用法
- 转战csdn博客
- 双序列DP
- Android开发遇到的问题
- MINIGUI开发中遇到的问题及解决方法