容器操作

来源:互联网 发布:扎克伯格起诉社交网络 编辑:程序博客网 时间:2024/06/15 02:14

构造函数

c.assign(beg,en)//将[beg:en)中的元素赋予c  两个地址。

大小和容量

x = c.size() //x是c的元素数目c.empty() //c为空吗? 是则返回1c.reserve(n)//为c预留n个元素的空间,只适用于vector和stringc.resize(n,v)//将c的大小改变为n;将增加的元素初始化为v;只用于顺序容器(和string)c.shrink_to_fit()//使c的容量等于它的大小;只适用于vector,deque和stringc.clear() //删除c的所有元素 

指向关联容器元素的迭代器只有当所指元素从容器中删除时才会失效。与之相反,指向顺序容器元素的迭代器当元素重新分配空间或所指元素在容器中移动时也会失效。
reserve() 最好看作一种提高性能可预测性和避免迭代器失效的方式。


迭代器
p = c.begin() //p指向c的首元素p = c.end() //p指向c的尾后元素p = c.rbegin() //p指向c的反序的首元素p = c.rend() //p指向c的反序的尾后元素cp = c.cbegin()//常量迭代器(不能修改元素) 

元素访问
c.front()  //指向c的首元素;关联容器不适用c.back()//指向c的尾元素;forward_list 和关联容器不适用c[i]//指向c的第i个元素;不做范围检查;链表和关联容器不适用c.at(i)//同上,若i超出范围则抛出一个out_of_rangec[k] //指向c中关键字为k的元素;若未找到则插入(k,mapped_type{});只适用于map和unordered_mapc.at[k]//同上,区别若未找到不会添加元素,而是抛出out_of_range 


栈操作
c.push_back(x) //将x添加到c的微元素之后(使用拷贝或移动)c.pop_back()//删除c的尾元素,无返回值c.emplace_back(args)//用args构造一个对象,将它添加到c的尾元素之后 



列表操作
q = c.insert(p,x)//将x插入到p之前;使用拷贝或移动q = c.insert(p,first,last) //将[first:last)中的元素插入到p之前;不适用于关联容器q = c.erase(p) //从c中删除位于p处的元素。q = c.erase(first,last)//从c中删除[first:last)间的元素c.clear()//删除c中所有元素 

insert()系列函数返回的结果q指向插入的最后一个元素。
erase()系列函数的返回结果q指向删除的最后一个元素之后的位置
对连续储存元素的容器,如vector和deque,插入或删除一个元素会导致其它元素移动。指向一个移动的元素的迭代器会失效。一般情况下,插入/删除点之后的元素会被移动;若新的大小超出旧容量,则所有元素都会被移动。任何向一个向量添加元素的操作都可能导致全部元素重新分配储存空间


比较和交换
c1 == c2c1 != c2c1 < c2 //字典序 c1 <= c2c1 > c2c1 >= c2c1.swap(c2)//交换c1和c2的值;不抛出异常swap(c1,c2)//c1.swap(c2) 


0 0
原创粉丝点击