C++语法学习笔记六:std::vector

实例代码:


#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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值