标签:fit images 保存 swap blog name auto 返回 ++
1.标准库中定义了一些顺序容器,所有顺序容器都提供了快速顺序访问元素的能力。
2.如果容器的元素类型没有默认构造函数,那么在构造这个容器的时候不能只指定这个容器的数目,因为没有办法默认构造这些元素。
3.常见的一些容器操作
4.当一个容器初始化另一个容器拷贝时,两个容器的元素类型必须完全匹配,如果用一个容器的迭代器去初始化另一个容器时,只要元素类型可以转换即可。
5.当定义一个array时除了指定类型之外还要定义它的大小,array可以进行拷贝赋值。
std::array<int, 3> arr = {1, 2, 3}; std::array<int, 3>::iterator iter; std::array<int, 3> arr1 = arr;
6.容器的赋值运算。
7.assign(array不可用)可以为类型不同但是相容的容器赋值。
std::list<std::string> names; std::vector<const char*> oldstyle; names = oldstyle; // 错误,类型不同 names.assign(oldstyle.cbegin(), oldstyle.cend());
8.除array外,swap不对任何元素进行拷贝,删除或插入操作,因此可以保证在常数时间完成。
9.关系运算符两边的运算对象必须是相同类型的容器,且必须保存相同类型的元素。而且只有当元素类型定义了相应的比较运算符才可以比较,比较方式和string类似。
10.除array外,所有标准库容器都提供灵活的内存管理。
11.当我们用一个对象来初始化容器时,或将一个对象插入到容器中时,实际上放入到容器中的是对象值得一个拷贝。
12.在新标准下,接受元素个数或范围的insert版本返回指向第一个新加入元素的迭代器,如果范围为空,不插入任何元素,insert操作会将第一个参数返回。
std::list<int> ls; int i; auto iter = ls.begin(); while (std::cin >> i) iter = ls.insert(iter, i); // 等价于调用push_front
13.emplace函数在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数相匹配。
14.在顺序容器中访问元素的操作如下,而且下面操作返回的都是引用,如果容器是const的对象,则返回值是const引用。
15.顺序容器的删除操作。
16.在一个forward_list中添加或删除元素的操作是通过改变给定元素之后的元素来完成的,所以forward_list没有insert,emplace和erase,而是定义了一些其他操作。
17.除了array外,可以用resize来增大或缩小容器。如果当前大小大于所要求大小,则多余的会被删除,反之会增加新元素到尾部。
18.向容器中添加或删除元素可能会使指向容器元素的指针,引用或迭代器失效。
向容器添加元素之后 :
从容器中删除元素后:
19.范围for语句体内不应该改变其所遍历序列的大小,因为一旦添加或删除元素,用来判断结束的end()函数的值可能变得无效了。
20.vector元素的存储是连续的,当增加元素的时候如果连续的内存空间不够,则会重新分配空间。string和vector通常会预留空间作为预备。定义vector对象的时候设定其大小也就没什么必要了,事实上如果这么做性能可能更差。只有一种例外情况,就是所有元素的值都一样。
21.管理容量的成员函数。
reserve至少会分配指定大小的空间,但是可能更大,而且当参数小于当前容量的时候,reserve什么也不做。
shrink_to_fit只是一个请求,标准库并不保证退还内存。
只有在insert操作时size()和capacity()相等或调用reserve时才会重新分配内存,会分配多少取决于实现。
22.修改string的操作。
23.string的搜索操作。
标签:fit images 保存 swap blog name auto 返回 ++
原文地址:http://www.cnblogs.com/zoneofmine/p/7225314.html