实例代码:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
struct student {
int num;
};
int main() {
//一: vector类型简介,标准库 集合或者动态数组。我们可以把若干对象放在里边
//vector 它能把其他对象装进来,也被称为容器。
vector<int> vec; //表示这个vec里边保存的是int型数据(int型对象)
//<int> :类模板,vector本身就是个类模板,<int> 实际上就是类模板的实例化过程。
vector<student> studlist; // 可以
vector<vector<string>> strchuan;// 可以,该集合里边的每一个元素又都是一个vector<string>对象;集合套集合
vector<int*> vec1; //可以
//vector<int &> vec2; //不可以,引用是个别名,不是一个对象,不能往vector里边放
//二: 定义和初始化vector 对象
//(1). 空vector
vector<string> mystr;//创建一个string类型的空vector对象(容器),目前这个mystr里不包含任何元素;
//push_back();
mystr.push_back("abcde");
mystr.push_back("def");
//(2). 元素拷贝的初始化方式
vector<string> mystr2(mystr);// 把mystr元素拷贝给了mystr2
vector<string> mystr3 = mystr;// 把mystr元素拷贝给了mystr3
//(3). C++11 标准中,用列表初始化方法给值,用{}
vector<string> mystr4 = { "aaa", "bbb", "ccc" };
//(4). 创建指定数量的元素,有元素数量概念的东西,一般会用圆括号;
vector<int> vec3(15, -200);// 创建15个int类型的元素,每个元素的值是-200
vector<string> vec4(5, "hello");// 创建5个string类型的元素,每个元素的值是hello
vector<int> vec5(20); //20个元素,[0]....[19], 每一个元素都为0;
vector<string> vec6(5); //5个元素,[0].....[4], 每个元素的值为"";
//(5). 多种初始化方式,()一般表示对象中元素数量这个概念,{}一般表示元素内容这个概念,但不绝对。
vector<int> i1(10); // 表示10个元素,每个元素值是缺省的0
vector<int> i2{ 10 };//表示是一个元素,该元素的值是10;
vector<string> snor{ "hello" }; //一个元素,内容是hello
vector<string> s22{ 10 };//10个元素,每个元素""。
vector<string> s23{ 10, "hello" }; //10个元素,每个元素的内容都是"hello"
vector<int> i3(10, 1); //10个元素。每个元素的值为1
vector<int> i4{10, 1};//2个元素,第一个元素值为10, 第二个元素值为1, 等同于初始化列表
//上面测试表明:要想正常的通过{}进行初始化,那么{}里边的值是类型,必须要跟vector后边这个<>里边元素类型相同
//三:vector对象上的操作:最常用的是不知道vector里有多少个元素。需要动态增加/减少,所以,一般来讲,先创建空vector
//(1). 判断是否为空empty(),返回的是布尔值。
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开始,必须小于size(),如果下标超过这个范围,将产生不可预测的结果
//
//cout << ivec[1] << endl; //[0] = 1, [1] = 2
//(6). = 赋值
vector<int> ivec2;
ivec2.push_back(111);
ivec2 = ivec; // ivec2得到了100个元素, ivec2原来的元素被清除掉
ivec2 = { 12, 13, 14, 15 }; // 用{}中的值取代了ivec2原有值;
cout << ivec2.size() << endl;
//(7). == 、!= :相等、不相等
//两个vector相等:元素数量相同,对应位置的元素值也得一样。否则就是不等。
vector<int> ivec3;
ivec3 = ivec;
if (ivec3 == ivec) {
cout << "ivec3 == ivec" << endl; //成立
}
ivec3.push_back(12345);
if (ivec3 != ivec) {
cout << "ivec3 != ivec" << endl; //成立
}
ivec.clear();
ivec3.clear();
if (ivec3 == ivec) {
cout << "ivec3 == ivec" << endl; //成立
}
//(8). 范围for的应用
vector<int> vecvalue{ 1,2,3,4,5 };
for (auto & vecitem : vecvalue){
vecitem *= 2; //扩大一倍
}
for (auto & vecitem : vecvalue) {
cout << vecitem << endl;
}
system("pause");
return 0;
}