首页 > 编程语言 > 详细

C++的容器(一):c++中所有容器的共通操作函数

时间:2020-01-21 22:02:10      阅读:83      评论:0      收藏:0      [点我收藏+]

C++中的所有容器都支持三个核心能力:

  1. 所有容器提供的都是‘value语义’而非‘reference语义’。可以通过指针元素来实现某些功能。
  2. 容器的所有元素有一个固定的次序(order),你可以以相同的次序多次遍历每个元素。并且每个容器也提供“迭代器生成器”函数,运用这些生成的迭代器可以遍历整个容器。
  3. 你无法保证程序的每个操作都安全。操作者必须确保操作函数的参数都符合要求,因为容器不会抛出异常。

容器(Container)的共通操作函数集(使用ContType表示所有容器类型):

函数功能
ContType c 产生一个不含有任何元素的空容器
ContType c1(c2)  产生一个一模一样的容器,所有元素都是按值复制的
ContType c(beg, end) 复制p[beg, end)区间内的元素,作为容器初值
c.~ContType()   删除所有元素
c.size() 返回容器中的元素数量
c.empty() 判断容器是否为空,相当于(size()==0),但这个函数可能更快
c.maxsize() 返回元素的最大可能数量
c1==c2 判断是否c1等于c2
c1!=c2 判断是否c1不等于c2
c1 < c2 判断是否c1小于c2
c1 > c2 判断是否c1大于c2
c1 <= c2 判断是否c1小于等于c2
c1 >= c2 判断是否c1大于等于c2
c1 = c2 将c2的元素拷贝复制给c1
c1.swap(c2) 将c1和c2的值做个交换
swap(c1, c2) 这是个全局函数,功能同上
c.begin() 返回一个迭代器,指向第一个元素
c.end() 返回一个迭代器,指向最后一个元素的下一位置,它并不指向最后一个元素
c.rbegin() 返回一个迭代器,指向倒数第一个元素
c.rend() 返回一个迭代器,指向第一个元素的前一位置,它并不指向第一个元素
c.insert(pos, elem) 将elem的一个副本安插于pos处,返回值和pos的意义并不相同
c.erase(beg,end) 移除[beg, end)区间内的所有元素,某些容器会返回没有被移除的第一个元素
c.clear() 移除所有元素,令容器为空
c.get_allocator() 返回容器的内存模型(memory model)

以下为一些实例,对上述部分函数做个说明:

构造函数(从区间中拷贝元素):

int array[] = {1,2,32,3,4,5};
set<int> s(array, array+sizeof(array)/sizeof(array[0]));

构造函数(从标准输入装置读取元素完成初始化操作,标准输入装置方法见博客):

std::deque<int> d((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
//注意std::istream_iterator<int>(std::cin)这条语句在c++中是个声明,不能作为参数,需要在两边加上(),表示这是一个表达式。

交换函数(c1.swap(c2)) / swap(c1, c2) ):

采用赋值构造函数来创建新的容器,之后源容器就不再使用了,这样赋值构造函数会再生成每个元素的拷贝,然后将源容器中的每个元素再删除掉。而且随着元素个数的增长,所需的时间也会增长(O(n)),而如果使用swap()函数,所做的操作仅仅是将两个容器内部的某些指针(指向元素、配置器)进行交换,所需时间为常数时间(O(C))。这就是swap函数的一个应用场景。

C++的容器(一):c++中所有容器的共通操作函数

原文:https://www.cnblogs.com/mindulmindul/p/12225813.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!