- array
std::array<double, 10> values;
std::array<double, 10> values {}; //将所有的元素初始化为 0 或者和默认元素类型等效的值
std::array<double, 10> values {0.5,1.0,1.5,,2.0};
array<char, 50> values {1,2,3};
values.data() 与 &values[0] 等价
cout<<values.data()<<endl;
cout<<&values[0];
- vector
//创建
vector<double> values; //这是一个空的 vector 容器,因为容器中没有元素,所以没有为其分配空间。当添加第一个元素(比如使用 push_back() 函数)时,vector 会自动分配内存。
values.reserve(20); //在创建好空容器的基础上,可以通过调用 reserve() 成员函数来增加容器的容量。
vector<int> primes {2, 3, 5, 7, 11, 13, 17, 19};
vector<double> values(20);
vector<double> values(20, 1.0); //第二个参数指定了所有元素的初始值,因此这 20 个元素的值都是 1.0;圆括号 () 中的 2 个参数,既可以是常量,也可以用变量来表示
//增
values.push_back(elem) //push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素)
values.emplace_back(elem) //emplace_back() 在实现时,是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。
values.insert(pos,elem) //在指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。
values.insert(pos,n,elem) //在指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。
values.insert(pos,first,last) //在指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器,values.insert(values.end(), array.begin(), array.end())
values.insert(pos, initlist) //在指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。
values.emplace(pos, elem)
//删
values.pop_back()
values.erase(pos)
swap(values[pos1], values[pos2]) pop_back() //先调用 swap() 函数交换要删除的目标元素和容器最后一个元素的位置,然后使用 pop_back() 删除该目标元素。
values.erase(beg, end) //删除 vector 容器中位于迭代器 [beg,end)指定区域内的所有元素,并返回指向被删除区域下一个位置元素的迭代器。
remove(beg, end, elem) //删除容器中所有和指定元素值相等的元素,并返回指向最后一个元素下一个位置的迭代器。
values.clear() //删除 vector 容器中所有的元素,使其变成空的 vector 容器。
//改
//查
values[n] //注意判断边界
values.at(n)
values.front() //首元素的引用
values.back() //尾元素的引用
values.data() //指向首个元素的指针(&values[0])
values.capacity() //在不分配更多内存的情况下,容器可以保存的最多元素个数
values.size() //容器中实际存储的元素个数
vector<int>::size_type/auto cap = values.capacity(); //定义一个变量保存容器的容量和大小
vector<int>::size_type/auto size = values.size(); //定义一个变量保存容器的容量和大小
values.begin() //指向容器中第一个元素的正向迭代器
values.end() //指向容器最后一个元素之后一个位置的正向迭代器
- deque(双端队列容器,在两端添加或者删除元素,时间复杂度都是常数阶O(1))
'''创建'''
deque<int> d;
deque<int> d(10);
deque<int> d(10, 5);
deque<int> d2(d1);
//拷贝普通数组,创建deque容器
int a[] = { 1,2,3,4,5 };
deque<int>d(a, a + 5);
//适用于所有类型的容器
array<int, 5>arr{ 11,12,13,14,15 };
deque<int>d(arr.begin()+2, arr.end());//拷贝arr容器中的{13,14,15}
'''增'''
d.push_back(elem);
d.push_front(elem);
d.emplace_back(elem);
d.emplace_front(elem);
d.emplace(pos, elem);
d.insert(pos, elem);
d.insert(pos, num, elem);
d.insert(pos, other_pos1, other_pos2);
d.insert(pos, {...});
'''删'''
d.pop_back(elem);
d.pop_front(elem);
d.erase(pos);
d.erase(pos1,pos2);
'''查'''
d[pos];
d.at(pos);
d.front();
d.back()
'''改'''
d[pos] = elem;
d.at(pos) = elem;
d.front() = elem;
d.back() = elem;
- list(双向链表容器,该容器的元素可以分散存储在内存空间中,而不是必须存储在一整块内存空间中。它可以在序列已知的任何位置快速插入或删除元素(时间复杂度为O(1))。并且在 list 容器中移动元素,也比其它容器的效率高。使用 list 容器的缺点是,它不能像 array 和 vector 那样,通过位置直接访问元素,即它不支持容器对象名[6]这种语法格式。正确的做法是从容器中第一个元素或最后一个元素开始遍历容器,直到找到该位置。)
'''创建'''
list<int> values;
list<int> values(10);
list<int> values(10, 5);
list<int> value2(value1);
//通过拷贝其他类型容器(或者普通数组)中指定区域内的元素,创建新的 list 容器。
int a[] = { 1,2,3,4,5 };
list<int> values(a, a+5);