C++容器的拷贝注意细节
2015-11-27 10:27
302 查看
为了创建一个容器为另一个容器的拷贝,两个容器的类型以及元素类型必须匹配。当传递参数为两个迭代参数用来拷贝时,就不需要容器类型是相同的了,而且严肃类型也不要求是相同的,只需要将考别的严肃转换为对应的元素类型即可。如图中实例:
c为一容器,c= {a,b,c,d,e,f…}将c种元素替换为初始化列表中的数据,但是对array不适用。
采用swap函数交换两个容器的元素时,对vector等元素不会移动,故其迭代器仍然有效,且减缓时间非常快,是一个常熟时间,但是对array的swap函数就会真正交换他们的元素,故交换时间与他们所含元素的数量成正比,交换后迭代器指向的已经是另一个array中所指向的元素了。即指向的值发生了改变。
swap函数有层原函数版本和非成员函数版本,推荐非成员函数版本,即swap(c1,c2);版本。
当我们用一个对象来初始化容器时,或者将一个对象插入到容器中时,司机上放入容器的是对象的拷贝,而不是对象本身,这与我们将对象传递给非引用参数一样,对容器中元素的修改不会影响到原始对象。
解引用c.end()–才能够得到容器最后一个元素,c.end()指向的是最后一个元素的后一个位置。
at()操作只支持vector、deque、array、string不支持list。可以这样里理解,at为随机访问,而list为链式存储,故不支持。
当进行大多数操作时,容器的尾后迭代器都会失效,故不要保存end返回的迭代器,而应该每次处理完相应的模块后均从新定位尾后迭代器。否则会产生灾难性后果。如下代码:
c为一容器,c= {a,b,c,d,e,f…}将c种元素替换为初始化列表中的数据,但是对array不适用。
采用swap函数交换两个容器的元素时,对vector等元素不会移动,故其迭代器仍然有效,且减缓时间非常快,是一个常熟时间,但是对array的swap函数就会真正交换他们的元素,故交换时间与他们所含元素的数量成正比,交换后迭代器指向的已经是另一个array中所指向的元素了。即指向的值发生了改变。
swap函数有层原函数版本和非成员函数版本,推荐非成员函数版本,即swap(c1,c2);版本。
当我们用一个对象来初始化容器时,或者将一个对象插入到容器中时,司机上放入容器的是对象的拷贝,而不是对象本身,这与我们将对象传递给非引用参数一样,对容器中元素的修改不会影响到原始对象。
解引用c.end()–才能够得到容器最后一个元素,c.end()指向的是最后一个元素的后一个位置。
at()操作只支持vector、deque、array、string不支持list。可以这样里理解,at为随机访问,而list为链式存储,故不支持。
当进行大多数操作时,容器的尾后迭代器都会失效,故不要保存end返回的迭代器,而应该每次处理完相应的模块后均从新定位尾后迭代器。否则会产生灾难性后果。如下代码:
//不安全,迭代器失效 auto beg = v.begin(); auto end = v.end(); while(beg!= end){ beg = v.insert(beg,21); ++beg; } //正确的写法 while(beg!= v.end()){//每次从新定位尾后迭代器 beg = v.insert(beg,21); ++beg; }
相关文章推荐
- C语言string家族函数使用说明及范例
- #if defined和#if !defined(c语言的宏定义)
- c++对ip和端口的处理
- 33.c/c++程序员面试宝典-函数重载
- 转: windows下C++ UI库 UI神器-SOUI
- C++中delete和delete[]的区别
- 汇编语言中的常数
- 二叉树遍历之递归实现(C++版)
- c语言编写一段小程序,出现了复制某个文件到一个找不到的路径里边
- 第10周项目3 利用二叉树遍历思想解决问题
- 第10周项目2 二叉树遍历的递归算法
- C语言结构体(struct)常见使用方法
- 千锋2015.04月最新C语言基础视频教程
- 为什么C++中只有指针和引用才能实现多态?
- oc语言学习之基础知识点介绍(四):方法的重写、多态以及self、super的介绍
- 一起talk C栗子吧(第六十四回:C语言实例--DIY字符串复制函数)
- C++得到成员变量的偏移值
- 《深入探索C++对象模型》笔记之第一章关于对象
- 【C语言】-循环的嵌套
- C语言中的offsetof