vector数组的定义以及操作

本文详细介绍了C++中一维和二维向量数组的初始化、访问、遍历及其它常用操作,包括数组的增删改查等核心功能。

一. 一维数组
1. 数组初始化

//第一种初始化,就单纯的建立一个可变数组array,因为还没有存放元素,未分配空间
vector<int> array;

//第二种初始化,是使用初始化列表来指定初始值以及元素个数
//以初始化列表中的値作为元素初始值,生成有6个数的初始vector数组
vector<int> array = {1,2,3,4,5,6};
vector<int> array{1,2,3,4,5,6};

//第三种初始化,使用初始元素个数以及指定元素值来生成初始vector数组
//生成一个具有numbers个元素的vector数组,且数组中所有元素初始化为value
vector<int> array(numbers, value);
vector<int> array(numbers);//此时,默认value为0
//第四种初始化,使用复制另一个数组的方式来初始化一个新数组,
//表示复制前n个元素
vector<int> newArray(array.begin(), array.begin() + n);//n = 3: newArray{1,2,3}

2. 数组的访问操作

//	 第一种:通过下标访问,与普通数组一样
			array[0];	// 1
			array[1];	// 2
			array[2];	// 3
			array[3];	// 4
			array[4];	// 5
			array[5];	// 6
//	第二种:通过迭代器访问
	vector<int>::iterator it;	// 迭代器it的定义
	it = array.begin();
	// 使用auto定义迭代器it也可
	auto it = array.begin();
	for(int i = 0 ; i < 6 ; i ++) {
		cout<<*(it + i)<<" ";
	}

3. 数组的遍历操作(auto定义)

    //C++11标准,auto关键字遍历
    for(auto iter = array.begin(); iter != array.end(); iter ++){
        cout << *iter <<" ";
    }
   // 也可以将下列中的auto换成定义的int型
    for(auto iter : array)
    {
        cout<<iter<<" ";
    }

4. 数组的其他操作

//添加元素
array.push_back(7);//将元素7加入数组末尾
//删除元素
//	1.删除数组末尾的元素
array.pop_back();
//	2.通过erase(iter),单个删除迭代器为iter处的元素
auto iter = array.begin();
array.erase(iter);//删除array[0]
//	3.通过erase(first,last),批量删除一个区间[first, last)内的所有元素
array.erase(array.begin() + 1, array.begin() + 3);//删除array[1],array[2]
//插入元素
//	insert(iter, x)用来向vector的任意迭代器iter处插入一个元素x
auto iter = array.begin() + 1;
array.insert(iter, 9);//将元素9插入array[1]的位置
//清空所有元素
array.clear();
//获取数组长度
array.size();
//判空
array.empty();

二. 二维数组
1. 数组初始化
(1)定义的同时初始化元素值

	vector<int> cov(3);//定义3个值为0的数组,具体参见上述一维数组的初始化
	int row = 3;
	vector<vector<int>> arr(row, cov);//row为行数,cov为列数上的数组,初始化成一个3*3的0元素矩阵
	//或者换成另一种写法
	int row = 3;
	vector<vector<int>> vec(row, vector<int> (col,1));//col代表元素个数,也就是列数,1为元素默认值,若只有col,则默认值为0

(2)先通过resize函数初始化容器大小,然后赋值
函数原型:
void resize (size_type n);
void resize (size_type n, const value_type& val);
第一个参数是将容器的元素变成n个,第二个参数是将这n个元素变成val(没有就是默认值)
注意:resize不适用于array
如果当前大小大于所要求的大小,容器后部的元素会被删除;如果当前大小小于新大小,会将新元素添加到容器后部。

	vector<vector<int>> arr;
	int row = 3;
	int col = 3;
	arr.resize(row);//定义行数大小
	for(int i = 0; i < arr.size(); i++) {
		arr[i].resize(col);//定义每一列的大小
	}
    for(int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			arr[i][j] = 1;
		}
	}
	//	或者另一种写法
	vector<vector<int>> arr;
	int row = 3;
	int col = 3;
	arr.resize(row, vector<int>(cov, 1));
	for(int i = 0; i < row; i++) {
		for (int j = 0; j < col; j++) {
			arr[i][j] = 1;
		}
	}

2. 数组的遍历操作
(1)迭代器遍历

for(auto iter = arr.begin(); iter != arr.end(); iter++)
    {
        auto vec_tmp = *iter;
        for(auto it = vec_tmp.begin(); it != vec_tmp.end(); it++)
            cout << *it << " ";
        cout << endl;
    }

(2)下标遍历

for (i = 0; i < arr.size(); i++)
    {
        for(j = 0; j < arr[0].size(); j++)
            cout << arr[i][j] << " ";
        cout << endl;
    }

3. 数组的其他操作

	//	添加元素
	arr[i].push_back(1);
	//	如下类似
<think>我们正在讨论一维vector数组大小的定义方法。根据用户的问题,他之前询问了二维vector,但现在聚焦于一维vector的大小定义。 根据C++vector的使用,一维vector的大小(即元素个数)可以通过几种方式定义: 1. 声明时不指定大小,后续通过push_back等添加元素,此时初始大小为0。 2. 声明时指定大小:vector<类型> 变量名(大小); 3. 声明时指定大小和初始值:vector<类型> 变量名(大小, 初始值); 4. 通过resize()方法改变大小。 我们参考之前的引用,虽然引用中主要讲二维,但一维是基础。例如引用[2]中提到了一维数组的初始化:vector<int> cov(3); 定义3个值为0的数组。 因此,我们可以这样总结: ### 一维`vector`数组大小的定义方法 在C++中,`vector`作为动态数组,其大小(即元素数量)可以通过以下方式定义和修改: #### 1. **声明时指定大小** - 语法:`vector<元素类型> 变量名(元素数量);` - 示例: ```cpp vector<int> vec(5); // 创建包含5个int元素的vector,每个元素初始化为0 ``` 此时`vec`的大小为5,所有元素值初始化为该类型的默认值(对于`int`是0)。 #### 2. **声明时指定大小和初始值** - 语法:`vector<元素类型> 变量名(元素数量, 初始值);` - 示例: ```cpp vector<string> words(3, "hello"); // 创建3个字符串元素,每个初始化为"hello" ``` #### 3. **声明空`vector`后调整大小** - 使用`resize()`方法: ```cpp vector<double> values; // 初始大小为0 values.resize(10); // 将大小调整为10,新增元素初始化为0.0 ``` - 也可以同时指定新增元素的初始值: ```cpp values.resize(15, 3.14); // 调整大小为15,新增的5个元素初始化为3.14 ``` #### 4. **通过赋值操作隐式改变大小** - 使用`assign()`: ```cpp vector<char> letters; letters.assign(5, 'A'); // 将letters的内容替换为5个'A'(大小变为5) ``` - 使用初始化列表(C++11起): ```cpp vector<int> nums = {1,2,3,4}; // 初始化时指定4个元素,大小为4 ``` #### 5. **获取当前大小** - 使用`size()`成员函数: ```cpp cout << vec.size(); // 输出当前vector包含的元素个数 ``` > **关键点**: > - 一维`vector`的大小在运行时可以动态改变。 > - 未显式指定大小时,默认构造的`vector`大小为0。 > - 指定大小但不指定初始值,元素将被值初始化(基本类型为0,类类型调用默认构造函数)。 #### 示例:不同方式定义一维vector ```cpp #include <vector> #include <iostream> using namespace std; int main() { // 方式1: 空vector vector<int> v1; cout << "v1 size: " << v1.size() << endl; // 0 // 方式2: 指定大小(5个0) vector<int> v2(5); cout << "v2 size: " << v2.size() << endl; // 5 // 方式3: 指定大小和初始值(7个100) vector<int> v3(7, 100); cout << "v3 size: " << v3.size() << endl; // 7 // 方式4: 初始化列表(大小由元素个数决定) vector<int> v4 = {9,8,7}; cout << "v4 size: " << v4.size() << endl; // 3 // 调整大小 v1.resize(10); // v1大小变为10 v4.resize(5); // v4大小变为5,新增的两个元素为0 return 0; } ``` --- §§相关问题§§ 1. 如何获取`vector`的当前容量(非大小)? 2. `resize()`和`reserve()`有什么区别? 3. 如何高效地缩减`vector`的内存占用? 4. `vector`的大小和容量在动态扩容时如何变化? 5. 为什么`vector`的`size()`操作是常数时间复杂度? </think>### 一维`vector`数组大小的定义方法 在C++中,`vector`作为动态数组,其大小(即元素数量)可以通过以下方式定义和修改: --- #### 一、**初始化时指定大小** ##### 1. **指定元素数量** ```cpp vector<int> vec(5); // 创建大小为5的vector,元素默认初始化为0 // vec = {0,0,0,0,0} [^2] ``` ##### 2. **指定元素数量 + 初始值** ```cpp vector<string> words(3, "hello"); // 大小为3,所有元素初始化为"hello" // words = {"hello","hello","hello"} [^2] ``` --- #### 二、**动态调整大小** ##### 1. **`resize()`方法** ```cpp vector<double> values; values.resize(10); // ✅ 将大小调整为10,新增元素初始化为0.0 // 若需指定初始值:values.resize(10, 3.14); [^1][^3] ``` ##### 2. **`assign()`方法** ```cpp vector<char> letters; letters.assign(5, 'A'); // ✅ 重置大小为5,所有元素为'A' // letters = {'A','A','A','A','A'} [^2] ``` --- #### 三、**空`vector`与隐式大小** ```cpp vector<float> emptyVec; // 初始大小为0 emptyVec.push_back(1.1); // 大小变为1 emptyVec.push_back(2.2); // 大小变为2 // 最终大小 = push_back()调用次数 [^1] ``` --- #### 四、**获取当前大小** ```cpp vector<int> nums(8); cout << nums.size(); // 输出:8(常数时间复杂度$O(1)$) ``` > **关键特性**: > - 初始化时未指定大小 → 默认大小为0 > - 未显式初始化元素 → 基本类型默认0,类类型调用默认构造函数 > - `resize()`和`assign()`会覆盖原有内容 --- #### 五、**典型示例** ```cpp #include <vector> #include <iostream> using namespace std; int main() { // 定义大小为4的一维vector(初始值=0) vector<int> scores(4); // 修改大小并赋值 scores.resize(6, 85); // 大小调整为6,新增元素初始化为85 // 输出:{0,0,0,0,85,85} for (int i=0; i<scores.size(); i++) { cout << scores[i] << " "; } return 0; } ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值