vector类型简介:vector属于标准库,可以把它看成集合或者动态数组。我们可以把对象放在里面(对象类型必须一致)。它能把其他对象装进来,所以也被成为容器。
头文件 是 #include <vector>,在命名空间 std 里。
1、用法:
vector<int> vjihe;//表示vjihe里面保存的是int型数据
举例:
struct student
{
int num;
};
int main()
{
vector<int> vjihe;
vector<student> studentlist;
vector<int *> vjihe2;
vector<int &> vjihe3 //这种写法是错误的,引用是一个别名,不是对象,所以不能放在vector内
return 0;
}
2、定义和初始化vector对象
(1)、空vector和使用 push_back初始化
vector<string> mystr;//创建了一个string类型的空的vector容器
mystr.push_back("abc");//使用push_back给mystr添加元素
mystr.push_back("def");
(2)、使用元素拷贝初始化
vector<string> mystr2(mystr); //把mystr元素拷贝给了mystr2
vector<string> mystr3 = mystr;//和上面拷贝结果一样
(3)、C++11标准中,用列表初始化方式初始化
vector<string> mystr4 = {"aaa","bbb","ccc"};
(4)、创建指定数量元素(有元素数量概念的东西,一般会用圆括号)
vector<int> ijihe(15,-200);//创建15个int类型的元素,每个元素的值是-200
vector<string> mystr5(5,"cao");//创建5个string类型的元素,每个元素的值是 "cao"。
//如果不给初始值的话,系统会根据元素类型给默认值,比如上面不给初值-200,系统就会给默认初始值0。不给"cao",系统就会给默认""。
vector<int> ijihe2(20);//ijihe[0]到[19],每一个元素的值都是0.
(5)、多种初始化方式
vector<int> i(10);//表示i里有10个元素,每个元素的值是0
vector<int> i2{10}; //表示i2里只有一个元素,该元素值为10
vector<string> mystr6{"cao"}; //mystr里有一个元素,元素值为"cao"
vector<string> mystr7{10};//mystr里有10个元素,每个元素都为""
vector<int> i3 {10,1};//i3里 有两个元素,第一个元素是10,第二个元素是1
3、vector对象上的操作
vector最常用的方式是,不知道vector里有多少个元素,需要动态增加、减少。所以一般先创建一个空的vector对象
vector有很多操作跟string很类似
(1)、判断是否为空
vector<int> ivec;
if(ivec.empty())
{
cout << "ivec为空" << endl;
}
(2)、push_back,用于向vector末尾增加一个元素
ivec.push_back(1);
ivec.push_back(2);
for(int i =3;i<=100;i+++)
{
ivec.push_back(i);
}
(3)、size
cout <<ivec.size() << endl; //100
(4)、clear,移除所有元素,将容器清空
ivec.clear();
cout << ivec.size() << endl;
(5)、v[n],返回v中的第n个元素。
n的范围从0开始,小于v.size()。如果引用下标超过这个范围,或者[]访问了一个空的vector,将会产生不可预估的结果。这种引用越界,编译器不会报错(因为没有语法错误)
cout << ivec[4]<< endl;//4
(6)、=
vector<int> ivec2;
ivec2.push_back(111);
ivec2 = ivec;//ivec2从ivec得到了100个元素,ivec2原来的111值被冲掉了
ivec2 = {1,2,3,4};
ivec2.size();//上一步ivec2里的值又被冲掉,此时打印4
(7)、== 和 !=
两个vector相等,元素数量想同,对应位置的元素值想同,否则就是不等。
vector<int> ivec3;
ivec3 = ivec;
if(ivec3 == ivec)
{
cout << "等"<<endl;
}
ivec3.push_back(23);
if(ivec3!=ivec)
{
cout << "不等" << endl;
}
ivec.clear();
ivec3.clear();
if(ivec3 == ivec)
{
cout << "等" << endl;
}
(8)、范围for的应用
vector<int> vecvalue = {1,2,3,4,5};
for(auto &vecitem : vecvalue)
{
vecitem = vecitem *2;//前面用的引用,所以修改vecitem的值,容器vecvalue的值也会变
}
for(auto vecitem : vecvalue)
{
cout << vecitem << endl;//这里输出胡2 4 6 8 10
}