STL标准库模板之vector(向量容器)
头文件包含 #include <vector>
之所以说vector是一个向量容器
是因为vector可以像容器一样存放各种数据类型的对象,并且可以动态的拓展容器大小
简单的说,vector就是一个存放任意数据类型(可以是int、string、float等)的动态数组,能够增加或者压缩数据
使用标准模板库vector的好处在于可以通过内部的一些方法对数据进行操作,省去数据结构的相关处理
<>里面的代表声明对象的数据类型
1.vector 对象的定义和初始化
vector<int> a; //创建一个int类型的空的vector对象,没有任何元素
vector<int> b(a); //b 是 a 的副本
vector<string> str(10, "mike"); //10个str,每个的内容都是"mike"
vector<int> c(10); //创建10个int类型vector对象,相当于c[10],每个元素的值默认为0
2.vector 对象常用操作
3.演示代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
// vector<int> a;//定义int类型的a对象
vector<int> a(5); //创建5个int类型vector对象,相当于a[5]
// vector<int> b(a);//b是a的副本
if (a.empty() == true) // empty()判断是否为空,为空返回true
{
cout << "vector 对象为空\n";
} else if (a.empty() == false) {
cout << "vector 对象不为空\n";
}
cout << "size = " << a.size() << endl; // size()返回容器的大小
for (int i = 1; i < 6; i++) {
a.push_back(i); //将i压到容器的最后
}
cout << "size = " << a.size() << endl;
for (int j = 0; j < a.size(); j++) {
cout << a[j] << ","; //用数组下标的形式访问
}
printf("\n");
a.pop_back(); //删除最后一个元素
cout << "size = " << a.size() << endl;
vector<int> b(a); //将a复制给b
cout << "这是b: \n";
for (int k = 0; k < b.size(); k++) {
cout << b[k] << ",";
}
printf("\n");
cout << "这是a: \n";
for (int j = 0; j < a.size(); j++) {
cout << a[j] << ","; //用数组下标的形式访问
}
printf("\n");
a.clear(); //清空a容器
cout << a.size() << endl;
cout << b.size() << endl;
cout << ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n";
return 0;
}
运行结果:
4.迭代器操作 vector 对象
除了使用下标来访问 vector 对象的元素外,标准库还提供了另一种访问元素的方法:使用迭代器(iterator) 。
迭代器是一种检查容器内元素并遍历元素的数据类型。实际上,vector 对象相当于数组,而迭代器就相当于指针。
#include <iostream>
#include <vector>
using namespace std;
int main( )
{
vector<int> v(10, 5); //有10个元素,每个元素的值都是5
//通过迭代器把所有元素的值打印出来
vector<int>::iterator it;
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
//通过迭代器给所有元素赋值为1
for( it=v.begin(); it!=v.end(); it++){
*it = 1;
}
cout << endl;
//通过迭代器把所有元素的值打印出来
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
it = v.begin(); //返回指向容器最开始位置元素的指针(迭代器)
//删除指针it+1指向位置的元素,返回指向下一个元素位置的指针(迭代器)
v.erase(it+1);
cout << endl << "after erase:\n";
//通过迭代器把所有元素的值打印出来
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
it = v.begin();
//在位置it后插入3个5
v.insert(it, 3, 5);
cout << endl << "after insert:\n";
//通过迭代器把所有元素的值打印出来
for( it=v.begin(); it!=v.end(); it++){
cout<< *it << ", ";
}
cout << endl;
return 0;
}
运行结果: