基础问题:
题目描述
给定一个长度为n的整数序列。
现在有m个 *** 作, *** 作分为三类,格式如下:
① 1 i:询问序列中第i个元素的值,保证i小于等于当前序列长度;
② 2 i v:在序列中第i个元素前加入新的元素v,保证i小于等于当前序列长度;
③ 3 i:删除序列中的第i个元素,保证i小于等于当前序列长度。
输入格式
第一行输入n(1<=n<=1000),表示序列最初的长度。
第二行输入n个空格隔开的数表示原始的整数序列。
第三行输入m(1<=m<=1000),表示 *** 作数。
第四到m+3行依次输入一个 *** 作。
输出格式
对于 *** 作①输出对应的答案,一行输出一个数。
输入输出样列
输入样例1:
5
6 31 23 14 5
5
1 2
2 2 7
1 2
3 3
1 3
输出样例1:
31
7
23
说明
1<=n<=1000, 1<=m<=1000,每个元素都是不超过1000000的正整数。
672
提交个数
418
通过个数
耗时限制
1000ms
内存限制
256MB
思路1:
vector简介:
vector是C++标准库提供的一个变长数组类型,它可以像数组一样进行数据的存储和访问,但是我们不需要指定vector的长度,vector会在需要的时候自动的扩展其自身的容量来容纳更多的数据。
vector的内部存储结构和数组一样,使用的是一段连续的存储空间。
小贴士:使用vector需要有头文件:
#include
命名空间:
vector属于std名字空间,需要使用using namespace std; 引入std命名空间。
vector<int> v1; //定义一个空的vector v1
vector<int> v2(10, 1); //定义一个vector v2,v2中含有10个值为1的元素
vector<int> v3(v2); //定义一个vector v3,v3复制了v2(v3 = v2)
vector<int> v4 = v2; //同上一行的作用一样,复制了v2
*** 作实例:
#include
#include
using namespace std;
int main()
{
vector<int> v(10, 1); //定义一个vector v, 里面含有10个为1的元素
for (int i = 0; i < 10; i++) cout << v[i] << " "; //输出这vector v的10个为1的元素
cout << endl;
for (int i = 0; i < 10; i++) v[i] += 10; //将vector v[i] 加上10;
v.front() -= 5; //运算
v.back() += 10; //运算
cout << "v.front is " << v.front() << endl;
cout << "v.back is " << v.back() << endl;
return 0;
}
【迭代器】
迭代器类似于指针,指向vector中元素的位置,可以使用迭代器来访问vector中的元素。
*** 作实例:
#include
#include
using namespace std;
int main()
{
vector<int> v;
for (int i = 1; i <= 10; i++)v.push_back(i);
vector<int>::iterator it1, it2;
it1 = v.begin();
cout << v[0] << " " << *it1 << endl;
it2 = v.end() - 1;
cout << v[9] << " " << *it2 << endl;
for (int i = 0; i < v.size(); i++) v[i] += 5;
vector<int>::iterator it3;
for (it3 = v.begin(); it3 != v.end(); it3++) *it3 -= 2;
for (it3 = v.begin(); it3 != v.end(); it3++) cout << *it3 << " ";
return 0;
}
【vector排序】
【vector和数组】
相同点:
①两者都是使用连续的存储空间进行数据元素的存储;
②两者都可以通过下标进行访问;
不同点:
①数组定义需要指定数组长度,定义后不可改变;vector定义无需指定长度,使用中会自动调整。
②vector引入了新的访问机制:迭代器;
③vector提供了很多好用的方法,可以对vector进行快速的 *** 作;
学习完了vector,我们再来写一下基础问题吧!
你会vector了吗?
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)