C++ vector 功能强大的数组

题目描述

小明很开心地发现了一个功能强大的从零开始的数组,这个数组能实现以下功能:

(1)插入一个元素到某个位置

(2)删除一个指定位置的元素

(3)询问数组中的第几个元素是什么

(4)询问数组的长度

(5)加入一个元素在数组的最后位置

请你也写出一个代码实现以上功能。

输入格式

第一行一个整数 n ,表示操作的个数。

接下来 n 行,每一行表示一个操作,每一行首先有一个整数 k 表示要实现第几个功能。

①当 k 为 1 时,接下来有两个整数 x,y,表示把 y 这个元素插到 x 位置上。

②当 k 为 2 时,接下来有一个整数 x ,表示删除x位置的元素。

③当 k 为 3 时,接下来有一个整数 x ,表示询问位置 x 上的元素是什么。

④当 k 为 4 时,接下来不存在整数,表示询问数组的长度。

⑤当 k 为 5 时,接下来存在一个整数 x ,表示把 x 加入数组的最后。

输出格式

若干行,每一行表示一个询问的答案。

样例数据

输入样例 #1输出样例 #1
10
5 1
5 2
3 1
4
1 1 3
2 2
4
3 1
5 3
4
2
2
2
3
3

样例分析

如上所述。

数据范围

对于 100% 的数据:n≤100000

解题:

#include<bits/stdc++.h>
using namespace std;
int n,k,x,y;
vector<int>a;
int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>k;
		if(k==4)cout<<a.size()<<endl;
		else{
			cin>>x;
			if(k==1)cin>>y,a.insert(a.begin()+x,y);
			else if(k==2)a.erase(a.begin()+x);
			else if(k==3)cout<<a[x]<<endl;
			else if(k==5)a.push_back(x);
		}
	}
	return 0;
}

### C++ 中 `vector` 的基本概念 `vector` 是 C++ 标准模板库(STL)中的一个重要容器,它是一个动态数组[^1]。与普通的静态数组不同的是,`vector` 可以自动调整大小来适应存储需求的变化。 --- ### 创建和初始化 `vector` 可以通过多种方式创建并初始化一个 `vector`: #### 默认构造 ```cpp std::vector<int> v; ``` 这会创建一个空的整数型向量。 #### 初始化列表 ```cpp std::vector<int> v = {1, 2, 3, 4}; ``` 通过大括号内的初始值列表定义向量的内容。 #### 指定长度和默认值 ```cpp std::vector<int> v(5, 0); // 创建一个包含 5 个元素且每个元素都为 0 的向量 ``` --- ### 访问 `vector` 元素的方法 可以使用不同的方法访问 `vector` 容器中的元素[^2]: #### 下标运算符 [] ```cpp v[0]; // 返回第一个元素 ``` 注意:如果索引超出范围,则行为未定义。 #### 成员函数 `at()` ```cpp v.at(0); // 返回第一个元素,并在越界时抛出 std::out_of_range 异常 ``` #### 获取首尾元素 ```cpp v.front(); // 返回第一个元素 v.back(); // 返回最后一个元素 ``` #### 转换为裸指针 ```cpp int* raw_ptr = v.data(); // 返回指向底层数据的第一个元素的指针 ``` --- ### 遍历 `vector` 方法 `vector` 支持两种主要的遍历方式:基于下标的循环以及迭代器的使用。 #### 基于下标的遍历 ```cpp for (std::vector<int>::size_type i = 0; i != v.size(); ++i) { std::cout << v[i] << " "; } ``` #### 迭代器遍历 ```cpp for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } ``` 这里需要注意的是,在现代 C++C++11 或更高版本),推荐使用更简洁的方式实现上述功能: ```cpp // 自动推导类型 for (auto it = v.begin(); it != v.end(); ++it) { std::cout << *it << " "; } // range-based for 循环 for (const auto& elem : v) { std::cout << elem << " "; } ``` --- ### 修改 `vector` 大小的操作 以下是常用的修改 `vector` 尺寸的功能: #### 添加单个元素到末尾 ```cpp v.push_back(value); ``` #### 入多个元素至指定位置 ```cpp v.insert(v.begin(), value); // 在开头入新元素 ``` #### 删除最后的一个或多个元素 ```cpp v.pop_back(); ``` #### 清除所有元素 ```cpp v.clear(); ``` 以上操作均会影响内部容量管理机制,当实际数量超过当前分配空间时,`vector` 会重新分配更大的内存区域并将旧的数据复制过去。 --- ### 总结 综上所述,`vector` 提供了一种灵活高效的解决方案用于处理具有变化尺寸的需求场景下的线性序列存储问题。其丰富的接口使得无论是简单的读写还是复杂的算法设计都能轻松应对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值