您现在的位置是:首页 >技术交流 >C/C++: vertor的用法-知识点比较密集-干货版网站首页技术交流

C/C++: vertor的用法-知识点比较密集-干货版

C+右耳 2026-06-28 00:01:05
简介C/C++: vertor的用法-知识点比较密集-干货版

前言:

        在C++世界中,vector是程序员的"动态瑞士军刀"--他是传统数组的升级版,又可以像链表一样灵活的缩放,却又可以保持着数组的高效随机访问的特性。通过自动内存管理,它让开发者告别了手动分配内存的繁琐和风险。稳居STL使用率榜首的它,通向现代C++高效率编程的钥匙。


如果您也觉得本文不错的话请不要吝啬手中的赞和关注嗷,您现在的关注是博主最早期的精神股东~


1.vector使用格式

        容器类型有广泛的选择范围。它既可以是各类基本数据类型,像常见的整数类型 int、双精度浮点类型 double、字符类型 char,字符串 string,也能是自定义的结构体类型; 此外,容器类型 还能代表 STL 标准库中的各种容器类型

#include<vector>//所需头文件

int main()//定义方式
{
    //格式:vector<容器类型> 容器名称;
    vector<int> v1;//定义了一个int元素类型 容器名称为v1
}

2.vector赋值方式

        定义的vector相当于一维数组,这意味着我们能够采用读取数组元素的方式来读取vector中的元素。

vector<int> vt{1,2,3,4,5}; //花括号赋值
for(auto i : vt) cout << i << " "; //1 2 3 4 5
vector<int> vt(5, 6); //括号赋值
for (auto i : vt) cout << i << " "; //6 6 6 6 6
vector<int> vt(5); //括号赋值
for (auto i : vt) cout << i << " "; //0 0 0 0 0

 3.vector二维数组的使用方式

//格式:vector<容器类型> 容器名(数量,容器名);  //这个vector中包含了多少个 其他类型
int main() 
{
	vector<int> v = { 1,2,3};//单个容器
	vector< vector<int> > vv(5,v);//二维容器
	//为了方便理解,我就不使用语法糖来写
	for (int i = 0; i < vv.size(); i++)
	{
		for (int j = 0; j < vv[i].size(); j++)
		{
			cout << vv[i][j] << " ";
		}cout<< endl;
	}
	return 0;
}

4.vector迭代器

  1. 正向迭代器(iterator):用于从容器的起始位置向末尾位置正向遍历元素。
    int main() {
        svector<int> vec = {1, 2, 3, 4, 5};
    
        // 使用正向迭代器遍历 vector
        for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
            cout << *it << " ";  // 使用 * 解引用迭代器获取元素的值
        }//运行结果:1 2 3 4 5
        cout << endl;
        return 0;
    }
  2. 常量正向迭代器(const_iterator):与正向迭代器类似,但只能用于读取元素,不能修改元素的值。当你需要遍历一个 const 类型的 vector 或者不希望修改元素时使用。
    int main() {
    	const vector<int> vec = { 1, 2, 3, 4, 5 };
    
    	// 使用常量正向迭代器遍历 const vector
    	for (vector<int>::const_iterator it = vec.begin(); it != vec.end(); ++it) {
    		cout << *it << " ";
    		// *it = 10;  // 错误:不能通过 const_iterator 修改元素的值
    	}	//运行结果:1 2 3 4 5
    	cout << endl;
    
    	return 0;
    }
  3. 反向迭代器(reverse_iterator):用于从容器的末尾位置向起始位置反向遍历元素。
    int main() {
    	vector<int> vec = { 1, 2, 3, 4, 5 };
    
    	// 使用反向迭代器遍历 vector
    	for (vector<int>::reverse_iterator rit = vec.rbegin(); rit != vec.rend(); ++rit) {
    		cout << *rit << " ";
    	}//运行结果:5 4 3 2 1
    	cout << endl;
    
    	return 0;
    }
  4. 常量反向迭代器(const_reverse_iterator):与反向迭代器类似,但只能用于读取元素,不能修改元素的值。
    int main() {
    	const vector<int> vec = { 1, 2, 3, 4, 5 };
    
    	// 使用常量反向迭代器遍历 const vector
    	for (vector<int>::const_reverse_iterator crit = vec.rbegin(); crit != vec.rend(); ++crit) {
    		cout << *crit << " ";
    		// *crit = 10;  // 错误:不能通过 const_reverse_iterator 修改元素的值
    	}//运行结果:5 4 3 2 1
    	cout << endl;
    
    	return 0;
    }

===至此,相信大家对 vector 已经有了一定程度的了解。接下来,就让我们开启 vector 常见函数的学习之旅吧!===

5.vector常用函数

1.begin() 和 end()-返回开始位置和结束位置

这两个成员函数用于返回迭代器,帮助我们遍历 vector 中的元素

  • begin():返回指向 vector 首个元素的迭代器。若 vector 为空,返回的迭代器与 end() 返回的迭代器相同。
  • end():返回指向 vector 末尾元素之后位置的迭代器,这是一个 “超尾” 位置,不指向实际元素。当使用迭代器遍历 vector 时,通常以 end() 作为结束条件。

int main() 
{
	vector<int> vec = { 1, 2, 3, 4, 5 };
	for (auto it = vec.begin(); it != vec.end(); ++it) {
		cout << *it << " ";
	}
	//运行结果:1 2 3 4 5
	cout << endl;
}

2.size()-获得元素个数

用法:size() 函数返回 vector 中当前存储的元素数量。它反映了 vector 实际包含的元素个数。

int main() {
	vector<int> vec = { 1, 2, 3 };
	cout << "元素个数: " << vec.size() << endl;
	//运行结果:元素个数: 3
	return 0;
}

3.capacity()-当前容量大小

用法:capacity() 函数返回 vector 当前已分配的存储空间能够容纳的元素数量。capacity 通常大于或等于 size,当 size 达到 capacity 时,若再添加元素,vector 会重新分配更大的内存空间。

int main() {
	vector<int> vec = { 1, 2, 3 };
	cout << "容量为: " << vec.capacity() << endl;
    //运行结果:容量为: 3
	return 0;
}

4.reserve()-预先分配容量

用法:reserve(n) 函数用于为 vector 预先分配至少能容纳 n 个元素的内存空间。如果 n 大于当前的 capacity,vector 会重新分配内存并将原有元素复制到新的内存空间;如果 n 小于等于当前的 capacity,则不会进行任何操作。

int main() {
	vector<int> vec = { 1, 2, 3 };
	vec.reserve(100);
	cout << "容量为: " << vec.capacity() << endl;
	//运行结果:容量为: 100
	return 0;
}

5.empty()-判空

用法:empty() 函数用于判断 vector 是否为空。如果 vector 中没有元素,返回 true;否则返回 false。

int main() {
	vector<int> vec;
	if (vec.empty()) {
		cout << "The vector is empty." << endl;
	}//运行结果:The vector is empty.
	return 0;
}

6.insert()-插入

用法:insert() 函数用于vector 的指定位置插入元素。

常见的调用形式有:

  • insert(pos, value):在迭代器 pos 所指向的位置插入一个值为 value 的元素。
  • insert(pos,n,value):在迭代器pos所指向的位置插入n个值为value 的元素。
  • insert(pos,first,last):在迭代器pos所指向的位置插入迭代器 first 到 last 范围内的所有元素。
int main() {
	vector<int> vec = { 1, 2, 3 };
	auto it = vec.begin() + 1;
	vec.insert(it, 4);  // 在第二个位置插入 4
	for (int num : vec) {
		cout << num << " ";
	}
	//运行结果:1 4 2 3
	cout << endl;

	vec.insert(it, 2, 5);  // 在第二个位置插入 2 个 5
	for (int num : vec) {
		cout << num << " ";
	}
	//运行结果:1 5 5 4 2 3
	cout << endl;

	vec.insert(it,vec.begin()+3,vec.end()-1);  // 在第二个位置插入 [3,4) 范围内的元素
	for (int num : vec) {
		cout << num << " ";
	}
	//运行结果:1 5 5 4 2 3 4
	return 0;
}

7.push_back()-尾插

用法:push_back(value) 函数用于在 vector 的末尾添加一个新元素,其值为 value。如果 vector 的 size 达到了 capacity,会自动重新分配内存以容纳新元素。

int main() {
	vector<int> vec = { 1, 2, 3 };
	vec.push_back(4);
	for (int num : vec) {
		cout << num << " ";
	}//运行结果:1 2 3 4
	cout << endl;
	return 0;
}

8.pop_back()-尾删

用法:pop_back() 函数用于移除 vector 中的最后一个元素。调用该函数后,vector 的 size 会减 1,但 capacity 不会改变。如果 vector 为空,调用此函数会导致未定义行为。

int main() {
	vector<int> vec = { 1, 2, 3 };
	vec.pop_back();
	for (int num : vec) {
		cout << num << " ";
	}//运行结果:1 2
	cout << endl;
	return 0;
}

9.erase()-移除指定位置或指定范围的数据

用法:erase() 函数用于移除 vector 中指定位置或指定范围内的元素。

常见的调用形式有:

  • erase(pos):移除迭代器 pos 所指向的元素。
  • erase(first, last):移除从迭代器 first 到 last 范围内的所有元素(不包含 last 所指向的元素)。
int main() {
	vector<int> vec = { 1, 2, 3, 4, 5 ,6,7,8,9,10};
	auto it = vec.begin() + 2;
	vec.erase(it);  // 移除第三个元素
	for (int num : vec) {
		cout << num << " ";
	}//运行结果:1 2 4 5 6 7 8 9 10

	vec.erase(vec.begin()+3,vec.end()-2);//移除 [3,7) 范围内的元素
	for (int num : vec) {
		cout << num << " ";
	}//运行结果:1 2 4 8 9
	cout << endl;
	return 0;
}

10.resize()-改变 vector 的大小

用法:resize(n) 函数用于改变 vector 的大小为 n。

如果 n 大于当前的 size(元素个数),会在 vector 的末尾添加默认构造的元素;如果 n 小于当前的 size,会移除末尾的元素,使 vector 的大小变为 n。resize(n, value) 则在 n 大于当前 size时,用 value 填充新添加的元素。

int main() {
	vector<int> vec = { 1, 2, 3 };
	vec.resize(5);  // 大小变为 5,新元素默认初始化为 0
	for (int num : vec) {
		cout << num << " ";
	}//运行结果:1 2 3 0 0
	cout << endl;

	vec.resize(2);  // 大小变为 2,超出部分被移除
	for (int num : vec) {
		cout << num << " ";
	}//运行结果:1 2
	cout << endl;

	return 0;
}

本文全面介绍了vector 的使用。涵盖基本定义、二维数组格式,讲解迭代器类型与使用,还阐述 begin、end 等多个常用接口用法。vector 灵活实用,能满足多样数据存储需求,愿大家深入掌握~

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。