C++9.3.8 赋值与swap
来源:互联网 发布:阿里云 公网流量费用 编辑:程序博客网 时间:2024/04/30 01:31
简介
- 与赋值相关的操作符都作用于整个容器
===============================================================================================================================================================
一、赋值与swap
* 与赋值相关的操作符都作用于整个容器*;
除swap外,其他操作都可以用erase和insert操作实现(删除和插入操作);
赋值操作符首先删除其左操作数容器中的所有元素,然后将右操作数容器的所有元素插入到左边容器中:
c1=c2;//赋值c2给c1c1.erase(c1.begin(),c1.end());c1.insert(c1.begin(),c2.begin());//赋值后,左右两边的容器相等,尽管赋值前两个容器的长度可能不相等,但赋值后两个容器都具有右操作数的长度
赋值和assign操作使左操作数容器的所有迭代器失效。swap操作则不会使迭代器失效。
完成swap操作后,尽管被交换的元素已经存放在另一个容器中,但迭代器仍然指向相同的元素。
1.使用assign—–c.assign(b,e) 类型可以不同但是必须兼容
assign操作首先删除容器内所有的元素,然后将其参数所指定的新元素插入到该容器中。
与复制容器元素的构造函数一样,如果两个容器类型相同,其元素类型也相同,就可以使用赋值操作符
如果在不同(或相同)类型的容器内,元素类型不同但是相互兼容,则其赋值运算必须使用assign函数。
由于assign操作首先删除容器中原来存储的所有元素,因此,传递assign函数的迭代器不能指向调用该函数的容器内的元素。(参数里面的是另外一个容器)
slist1.assign(slist2.begin(),slist2.end());//等效于将slist2赋给slist1
- assign运算的第二个版本需要一个整型数值和一个元素值做参数,它将容器重置为存储指定数量的元素,并且每个元素的值都为指定值
slist.assign(10,"HIya");//10个元素HIya
2.使用swap操作以节省删除元素的成本—-类型必须完全匹配,使用swap函数后,迭代器不变
swap操作实现交换两个容器内所有元素的功能。
要交换的容器的类型必须匹配:操作数必须是相同类型的容器,而且所存储的元素类型也必须相同。
swap函数不会删除或插入任何元素,而且保证在常量时间内实现交换由于容器内没有移动任何元素,因此迭代器不会失效。
没有移动元素这个事实意味着迭代器不会失效。他们指向同一个元素,就像没有做swap运算之前一样。虽然,在swap运算后,这些元素已经被存储在不同的容器之中了。例如,swap函数之前,有一个迭代器iter指向svec1【3】字符串;实现swap运算后,该迭代器则指向svec2【3】字符串(这是同一个字符串,只是存储在不同的容器之中而已)
有点不懂,它容器都变了,迭代器怎么算没有变呢?????
vector<string> svec1(10);//vector容器内有10个空串vector<string> svec2(24);//vector容器内有24个空串svec1.swap(svec2);//执行swap函数,svec1中存储24个元素,svec2中存储10个元素
- C++9.3.8 赋值与swap
- python-swap函数复制与赋值
- copy and swap技巧与移动赋值操作符
- 【c++】深赋值与浅赋值
- C swap
- 关于JVM INSTR swap赋值
- 数据结构与算法in C&C++(1)/SWAP
- C++ 顺序容器的操作(7) 赋值与交换=、swap、 assign
- C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap
- c语言:赋值运算符与赋值表达式
- 复制构造函数与赋值重载(c++)
- C/C++数组边界与赋值
- C++初始化与赋值
- C++初始化与赋值
- C指针的初始化与赋值
- C++初始化与赋值
- C++初始化与赋值
- C++初始化与赋值
- 程序入口-UIApplicationMain详解
- uva1484
- 利用底层键盘钩子屏蔽任意按键
- android之layout布局和ListView中的一些属性介绍
- Math.round(11.5)等于多少?Math.round(-11.5)等于多少?
- C++9.3.8 赋值与swap
- 荷兰国旗
- OracleOraDb11g_home1TNSListener服务启动后自动停止
- python 使用scapy进行ARP扫描
- Linux内核Backlog笔记
- myeclipse如何切换用户
- jQuery checkbox“checked”返回 undefined
- 给字符数组赋值的方法
- leetcode--Rotate List