从零开始学习C++(十一.C++vector数组)

275 阅读1分钟

「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战

前言

前面介绍了数组基本功能,例如初始化,查改,计算长度,还有好多关于数组的知识,今天来看下

vector数组

vector英文意思是矢量,向量,载体的意思
vector是一个能存放任意数据类型的动态数组,这个概念和Golang中的数组与切片的关系差不多,C++中的数组的大小是固定的,动态数组是可以改变的,vector能够动态扩缩容,其他的和普通的数组差不多,通过下表索引来访问其中的元素

vector定义方式

#include <vector>
#include <iostream>

using namespace std;
int main() {
	vector<string> a(3, "a"); //3个a的动态数组
	vector<int> b{ 1,3,5,7,9};
	for (auto i : a) {  //C++ 11新特性 表示i变量是自动匹配的数据类型
		cout << i << endl;
	}
	for (auto i : b) {
		cout << i << endl;
	}
}

image.png

增加元素

增加元素主要分为两种,从尾部和头部插入,分别是push_back和insert方法,push_back为尾部插入,insert为头部插入,来看看代码:

#include <vector>
#include <iostream>

using namespace std;
int main() {
	vector<int> c{ 1,3,5,7,9 };


	c.push_back(1);
	std::vector<int> d(c);  //c复制给d
	vector <int>::iterator it = d.begin();
	d.insert(it, 5, 10);
        d.insert(it,999);
	for (auto i : c) {
		cout << i << endl;
	}
	cout << '\n' << endl;
	for (auto i : d) {
		cout << i << endl;
	}
}

image.png 可以看到分别在vector前后插入了一些元素,在使用insert的时候需要进行生成迭代对象,在迭代对象中插入,insert方法可以接收三个或两个参数,三个参数如上所示,第一个为迭代对象,第二个为插入元素的个数,第三个为插入的元素,接受两个参数的时候就会忽略插入元素的个数

删除元素

删除元素,主要有三个方法:

  • pop_back() 删除最后一个元素
  • erase() 删除指定位置元素
  • clear() 清除所有的元素 现在来一一测试一遍:
#include <vector>
#include <iostream>

using namespace std;
int main() {
	vector<int> array{ 1,3,5,7,9 };
	array.pop_back();
	for (auto i : array) {
		cout << i << endl;
	}
	std::vector<int> f(array); 
	vector <int>::iterator it = f.begin();
	f.erase(it+1);  //开始位置加一
	cout << '\n' << endl;
	for (auto i : f) {
		cout << i << endl;
	}
	f.clear();
	for (auto i : f) {
		cout << i << endl;
	}
}

image.png

判断vector是否为空

使用empty()方法:

#include <vector>
#include <iostream>

using namespace std;
int main() {
	vector<int> array1{ 1,3,5,7,9 };
	vector<int> array2{};
	cout << empty(array1) << endl;
	cout << empty(array2) << endl;
}

image.png 结果是0为空,1为非空

总结

C++中的vector动态数组基本使用已经过了一遍。还认识了一个auto的数据类型。下面想使用学习的内容来实现一个简单的算法,来比较语言差距