STL容器类

来源:互联网 发布:酷狗网络异常无法加载 编辑:程序博客网 时间:2024/05/16 02:38

第六章、STL容器

1.当容器插入元素时将调用元素的拷贝构造函数,因此如果对我们自定义的类型使用容器,应该为自定义
  类型提供拷贝构造函数,如果没有提供编译器将为我们自动生成一个拷贝构造函数,当在容器中插入自
  定义类型元素时,将调用编译器生成的拷贝构造函数。


容器类的共有操作:

初始化操作:

ContType c;         创建一个没有任何元素的空容器。
ContType c1(c2);    拷贝一个同类型的容器。
ContType c(beg,end) 创建一个容器,并拷贝[beg,end)范围的元素初始化容器。
c.~ContType();      删除所有元素并释放内存。

大小操作:

c.size();           返回元素实际数目。 
c.empty();          返回容器是否为空(相当于size()==0,但可能更快)。
c.max_size();       返回能容纳元素的最多数目。

比较操作:

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 >= c2     返回c1是否大于或等于c2(等价于!(c1<c2))。

使用比较运算符==, ! =, <, <=, >, 和 >=要求两个容器的类型相同。

赋值和swap()操作:

c1 = c2      将c2所有元素赋值给c1的所有元素。
c1.swap(c2)  交换c1和c2的数据。
swap(c1,c2)  全局函数,功能和c1.swap(c2)相同。

迭代器操作:

c.begin()    返回一个指向第一个元素的迭代器。
c.end()      返回一个指向最后一个元素下一个位置的迭代器。
c.rbegin()   返回一个指向从反方向开始的第一个元素的反向迭代器。
c.rend()     返回一个指向从反方向开始的最后一个元素的后面位置的反迭代器。

其它操作:

c.insert(pos,elem)  插入一个elem的拷贝(返回值和pos可能不同)。
c.erase(beg,end)    移除[beg,end)范围内的所有元素(有的容器返回没有移除的下一个元素)。
c.clear()    移除所有元素(使容器变为空)。
c.get_allocator()   返回容器的内存模型。


用数组的元素初始化容器:

int array[] = { 2, 3, 17, 33, 45, 77 };
...
//copy all elements of the array into a set
std::set<int> c(array,array+sizeof(array)/sizeof(array[0]));

通过标准输入初始化容器:


//read all integer elements of the deque from standard input
错误写法:
std::deque<int> c(std::istream_iterator<int>(std::cin),
std::istream_iterator<int>());

这表示:c声明一个函数,返回值类型是deque<int>,cin是第一个参数名,类型为istream_iterator
<int>,而第二个参数是无名参数,参数类型是不带参数、返回值类型为istream_iterator<int>的
函数,这显然不正确。

正确写法:
std::deque<int> c((std::istream_iterator<int>(std::cin)),
(std::istream_iterator<int>()));
不要忘记参数附近需要加上额外的括号。