初始化、赋值 添加、删除、访问 查看、修改容器大小
- 向一个deque,vector,或string插入元素会使所有指向容器的迭代器,引用,指针失效。
- 删除deque中除收尾位置之外的任何元素都会使迭代器,引用,指针失效;指向vector,string中除删除点之后位置的迭代器,引用,指针都会失效。
-
连续添加或删除时,注意迭代器是否有效,用
erase
insert
更新迭代器。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> ivec{1, 1, 2, 1};
auto it = ivec.begin();
auto org_size = ivec.size()/2;
while (org_size--)
{
if (*it == 1)
{
it = ivec.insert(it, 2);
it++;
it++;
}
else
it++;
}
for (auto &empty : ivec)
{
std::cout << empty << " ";
}
std::cout << std::endl;
return 0;
}
- 删除元素的成员函数并不检查参数。
类型别名
- iteratora
- const_iterator
- reference
- const_reference
- value_type
- size_type
- difference_type
容器的定义和初始化
C c
C c1(c2)
C c1=c2
类型相同(容器类型和元素类型)C c{a,b,c...}
C c={a,b,c...}
C c(b,e)
b,e为迭代器C seq(n)
n个元素C c(n,t)
t为初值
赋值与swap
c1=c2
c={a,b,c...}
swap(c1,c2)
c1.swap(c2)
seq.assign(b,e)
seq.assign(il)
il
是花括号包围的元素列表seq.assign(n,t)
向顺序容器添加元素
c.push_back(t)
返回void
c.emplace_back(args)
c.push_front(t)
返回void
c.emplace_front(args)
c.insert(p,t)
返回新添加元素的迭代器
c.emplace(p,args)
c.insert(p,n,t)
返回新添加第一个元素的迭代器c.insert(p,b,e)
c.insert(p,il)
访问元素 (返回的是引用)
c.back()
c.front()
c[n]
c.at[n]
如果下边越界,会抛出out_of_range异常
删除元素
c.pop_back()
返回void
c.pop_front()
c.erase(p)
返回一个指向被删除元素之后元素的迭代器。c.erese(b,e)
c.clear()
返回void
容器大小操作
c.size()
c.empty()
c.max_size()
改变容器大小
c.resize(n)
c.resize(n,t)
容器大小管理操作
c.shrink_to_fit()
c.capacity()
c.reserve(n)