初始化

  3种初始化的方式。

vector<int> v1;

//初始化10个值为1的v2
vector<int> v2(10, 1);

vector<int> v3(v2.begin(), v2.end());

vector空间增长

size()

  1.获取数据个数。

vector<int> v1(10, 1);
cout << v1.size() << endl;    //10

capacity

  1.获取数据容量大小。

vector<int> v1(10, 1);
cout << v1.capacity() << endl;//10

empty

  1.判断容量是否为空。

vector<int> v1(10, 1);
cout << v1.empty() << endl;    //false

resize & reserve

  1.reserve只负责开辟空间,只会扩大,不会缩小(vs2022)。
  2.resize()在开辟空间的时候还会进行初始化,影响size。

void test_vector2() {
	vector<int> v1(10, 1);
	cout << v1.size() << endl;    //10
	cout << v1.capacity() << endl;//10

	v1.reserve(20);
	cout << v1.size() << endl;    //10
	cout << v1.capacity() << endl;//20

	v1.reserve(15);
	cout << v1.size() << endl;    //10
	cout << v1.capacity() << endl;//20

	v1.reserve(5);
	cout << v1.size() << endl;    //10
	cout << v1.capacity() << endl;//20
}

vector增删查改

push_back

  1.在v1的末尾插入元素10。

void test_vector() {
	vector<int> v1(10,1);
	v1.push_back(10);
}

pop_back

  1.在v1的末尾进行删除元素。

void test_vector() {
	vector<int> v1(10,1);
	v1.pop_back(10);
}

find

  1.这是属于algorithm头文件的函数。
  2.查找成果,返回这个数据第一次出现的迭代器,否则返回end()。

void test_vector() {
	vector<int> v1(10,1);
	auto it = find(v1.begin(), v1.end(), 1);
	cout << *it << endl;
}

insert

  1.在对应的位置插入数据。
  2.在使用迭代器插入数据时,要保证迭代器没有变化,防止造成迭代器失效。

void test_vector() {
	vector<int> v1(10,1);
	auto it = find(v1.begin(), v1.end(), 1);

	//在对应的迭代器前插入数据 
	v1.insert(it, 0);
}

erase

  1.删除对应迭代器的元素。
  2.在使用迭代器删除数据时,要保证迭代器没有变化,防止造成迭代器失效。

void test_vector() {
	vector<int> v1(10, 1);
	auto it = find(v1.begin(), v1.end(), 1);
	v1.erase(it);
}

swap

  1.交换两个vector的数据空间。

void test_vector() {
	vector<int> v1(10, 1);
	vector<int> v2(10, 2);

	v1.swap(v2);
}

二维

  1.在vector中嵌入vector。
  2.v1中存储5个数据1。
  3.v2中存储10个v1。

void test_vector() {
	//10行5列
	vector<int> v1(5, 1);
	vector<vector<int>> v2(10, v1);

	v2[2][1] = 3;
	v2.operator[](2).operator[](1) = 3;

	for (size_t i = 0; i < v2.size(); ++i) {
		for (size_t j = 0; j < v2[i].size(); ++j) {
			cout << v2[i][j] << " ";
		}
		cout << endl;
	}
}
vector<vector<int>> generate(int numRows) {
	vector<vector<int>> col(numRows);
	for (int i = 0; i < numRows; ++i) {
		vector<int> row(i + 1);
		col[i] = row;
	}
}

遍历

  1.通过索引下标进行遍历(像数据一样访问)。
  2.通过迭代器进行遍历。在这里插入图片描述

  3.通过增强for进行遍历(本质还是进行迭代器遍历)

//初始化10个值为1的v2
vector<int> v2(10, 1);

vector<int> v3(v2.begin(), v2.end());

for (size_t i = 0; i < v3.size(); ++i) {
	cout << v3[i] << " ";
}
cout << endl;
vector<int>::iterator it = v3.begin();
while (it != v3.end()) {
	cout << *it << " ";
	it++;
}
cout << endl;

for (auto e : v3) {
	cout << e << " ";
}
cout << endl;

operator[] & at

  at()和operator[]都是根据下标获取任意位置元素的,在debug模式下两者都会去做边界检查。
  当发生越界行为时,at时抛异常,operator[]内部的assert会触发。
在这里插入图片描述

觉得我回答有用的话,记得点个关注哟!谢谢支持!

更多推荐