STL 中存在了许多的容器、我们对这些容器进行总结归纳, 第一个容器Vector:
vector : 动态数组、 在创建时可以不指定数组的大小、随用随插
容器中元素个数可能与容器的大小不同,即容器大小>= 容器中元素个数;
默认构造函数:
vector<int> v1;
带参的构造函数:(存放10个元素大小、即都初始化为0)
vector<int> v2(10);
vector<int> v3(10,66);
创建10个元素大小的动态数组、 且初始化都为66;
迭代器:
vector<int>::iterator it = v1.begin();
for (; it != v1.end(); it++) {
cout << *it << " ";
}
//迭代器 end 代表的是 最后一个元素的后一个位置
//迭代器可以理解为一个指针,指向容器中的元素, 同样迭代器也可以向指针一样加减
赋值操作:
assign(n,x); //n代表元素个数 x为具体的值
//会改变原容器的元素个数和具体值,但不会改变原容器的size(当n<size)
assign(v1.begin(),v1.end()) 使用 other迭代器赋值
判断容器是否为空:
v1.empty(); //返回值为true/false;
改变容器大小:
resize(n) 为保留前n个(减小) 元素个数改变 容器大小不变
resize(n,x) n>元素个数 x为新增的元素的值
resize(n) n>元素个数 默认为0
在尾部插入元素/ 删除元素:
v3.push_back(x);
v3.pop_back();
在任意位置处插入元素:
//insert函数
//插入一个
v2.insert(v2.begin(),100); //v2.insert(迭代器位置 , x) 也可以 v2.begin()+n x为具体的值
//插入多个
v2.insert(v2.begin()+3,3,8); //插入3个8
容器中元素的存取:
1. 使用下标: v1[i];
2. 使用at() v1.at(i);
3. 使用接口: v1.front(); v1.end();
//使用前两种方式时,注意判断是否越界!
元素删除:
//删除单个/多个元素:
vector<int>::iterator it = v1.begin();
v1.erase(it); //删除该位置处的元素;
v1.erase(it,it+2); // 删除多个元素;
返回值为: 删除元素的所在的迭代器的下一个迭代器;因此在删除时需要注意!
//全部删除
v1.clear(); //删除元素、保留空间!
算法:
sort(v1.begin(), v1.end()); //排序 从小到大
reverse(v1.begin(), v1.end()); // 反转
find(v1.begin(), v1.end(),1) // 在容器中查找元素10,
//若存在则返回其在向量中的位置(迭代器), 若不存在则返回v1.end()