参考:https://www.runoob.com/cplusplus/cpp-stl-tutorial.html
“C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
C++ 标准模板库的核心包括以下三个组件:
组件 | 描述 |
容器(container) | |
容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。 | |
算法(algorithms) | |
算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。 | |
迭代器(iterators) | 迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。 |
向量容器(一个 C++ 标准的模板),它与数组十分相似,唯一不同的是,向量在需要扩展大小的时候,会自动处理它自己的存储需求."
下面是使用的demo:
void tVector()
{
//创建一个vector 对象,里面存储数据的类型时int
vector<int> v;
v.push_back(1); //在向量末尾插入1
v.push_back(2); //在向量末尾插入2
v.push_back(3); //在向量末尾插入3
v.pop_back(); //把向量末尾的3删除
v.push_back(12); //在向量末尾插入12
v.push_back(10); //在向量末尾插入10
//判断向量是否为空
cout << v.empty()<<endl;
//获取向量当前大小
cout <<"vector size:" <<v.size() << endl;
//获取向量当前的容量,即在不扩容的情况下可以存放数据的个数
cout << "vector capacity:" << v.capacity() << endl;
// 使用迭代器 iterator 访问值
vector<int>::iterator iv = v.begin();
while (iv != v.end()) {
cout << "value of v = " << *iv << endl;
iv++;
}
iv = v.begin();
v.erase(iv);//删除第一个数据
v.insert(v.begin()+2, 5); //从向量开始的位置,偏移两个单位,插入5
v.insert(v.begin() + 4, 90); //从向量开始的位置,偏移四个单位,插入90
v.insert(v.end(), 123);
v.push_back(101); //在往向量中插入数据的过程中,如果发现空间不够,向量内部会自动进行扩容
v.push_back(102);
v.push_back(103);
v.push_back(104);
//从向量开始的位置,偏移四个单位,用100替换其值
v.emplace(v.begin() + 4, 100);
//设置保留空间,会改变capacity()的返回值
v.reserve(15);
//获取向量当前大小
cout << "vector size:" << v.size() << endl;
//获取向量当前的容量
cout << "vector capacity:" << v.capacity() << endl;
//获取第二个
cout<<"data at(2) is "<<v.at(2)<<endl;
//获取最前面的一个
cout<<"data front() is "<<v.front()<<endl;
//获取最后端的一个
cout <<"data back() is "<<v.back() << endl;
iv = v.begin();
while (iv != v.end()) {
cout << "value of v = " << *iv << endl;
iv++;
}
cout <<"vector size is "<< v.size() << endl;
cout << endl;
}
结果:
当然,向量中除了可以存放int类型的数据,其他的像char,DWORD,std::string或者自定义的结构体都是可以的。