1、容器的共通能力
1、 所有的容器都是“value”语意,而不是“reference”语意。容器进行元素的安插操作时,内部实施的都是拷贝操作,置于容器内。因此STL容器的每个元素都必须能被拷贝。如果你打算存放的对象不具有public copy构造函数,或者你要的不是副本(例如你要的是被多个容器共同容纳的元素),那么元素就只能是指针(指针对象)。
2、 所有元素都形成一个次序。每个容器都可以依相同次序一次或多次遍历每个元素。每个容器都提供返回“迭代器”的函数,运用这些迭代器可以访问所有元素。
3、 各项操作非绝对安全。调用者必须保证传给操作函数的参数符合要求。违反这些要求(例如非法索引)会导致未定义的行为,并且STL不会抛出异常,从而导致程序数据错误或者崩溃等问题。
2、容器的共同操作
每个容器都有个default构造函数,一个copy函数和一个析构函数。
操作 |
效果 |
ContType c |
产生一个未含任何元素的空容器 |
ContType c1(c2) |
产生一个同型容器 |
ContType c(begin,end) |
复制[begin,end]区间的元素,作为初值 |
c.size() |
返回容器中的元素数量 |
c.empty() |
判断容器是否为空,相当于(0==size()),可能更快 |
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,相当于!(c1<c2) |
c1 <= c2 |
判断是否c1小于等于c2,相当于!(c1>c2) |
c1 = c2 |
将c2所有的元素赋值给c1 |
c1.swap(c2) |
交换c1和c2的数据 |
swap(c1,c2) |
交换c1和c2的数据,全局函数 |
c.begin() |
返回一个迭代器,指向c的第一个元素 |
c.end() |
返回一个迭代器,指向c的最后一个元素的下一个位置 |
c.rbegin() |
返回一个逆向迭代器,指向逆向遍历的第一个元素 |
c.rend() |
返回一个逆向迭代器,指向逆向遍历的最后一个元素的下一个位置 |
c.insert(pos,elem) |
将elem的一份副本安插于pos处 |
c.erase(beg,end) |
移除[beg,end]区间的所有元素 |
c.clear() |
移除所有元素,令容器为空 |
c.get_allocator() |
返回容器的内存模型 |