以前的文章从题解转载到分享,看过的可以退出了QAQ
内容如有错误请在评论区反馈我会做出更正,谢谢 Orz
1.关于vector(新板块)
既然想学vector,那么首先要知道vector到底是什么呢,这里给大家简单介绍一下,详细内容见上方原题链接(百度),下面是一段摘抄:
vector是C++标准模板库中的部分内容,中文偶尔译作“容器”,但并不准确。它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。
嗯,动态数组,就是他了
这里再给大家提供一个较专业的网址,里面会有更多关于vector的内容:
http://www.cplusplus.com/reference/vector/vector/
2.头文件
在上面的介绍中我们可以看出他是有自己的函数库的,所以他也当然有自己的头文件,也就是 #include <vector>
#include <iostream>
#include <vector> //就是它
using namespace std;
int main() {
return 0;
}
#include <bits/stdc++.h> //当然也包括在万能头里
using namespace std;
int main() {
return 0;
}
3.定义&声明
vector的声明可就和普通的变量有些不同了,由于他太犇了,太多功能了,于是他的声明就需要多一些限制,也就是要加上你要使用的“功能”;
我们已经知道他是一个“数组”那么他与string就有了一些共同之处,后面我们会提到;但我们现在至少要知道,他是由很多内容拼凑在一起的(虽叫数组,不止存数),而他又是多功能,自然需要一个限制条件————变量类型;
所以定义方法为 vector<变量类型> 数组名
,下面是举例:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<int> a; //定义一个存int类型的数组a
vector<long long> b; //大数也可以存
vector<double> c; //分数没问题
vector<char> d; //字符也可以
vector<string> e; //字符串也是小意思(加头文件!)
return 0;
}
就像这样
4.输入&输出&部分常用函数(由于vector比较特殊所以一些常用函数需要在这里提前说一下)
我们再回到vector的中文名上,这次,我们重点看前两个字。动态!你品,你细品!动态,这就是说我们随时可以往里面存入和输出元素,改变它的位置甚至删除某一个元素等一系列复杂的string无法完成的操作。同时,这也意味着,我们可能无法使用普通的输入(cin)了;那么我们应该用什么呢?
这里就要用到vector函数库中的内容了,一种vector特有的输入方法———— push_back()
使用方法: 数组名.push_back(输入的内容或变量)
举例如下:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a; //首先定义一个int类型数组a
a.push_back(1); //往数组a中放入第一个一个元素“1”;
//a:{1}
a.push_back(2); //再放入一个“2”
//a:{1, 2}
int b = 15; //接下来试一下存入变量,先声明
a.push_back(b); //把变量b存入,b依旧可以在数组外使用
//a:{1, 2, 15(b)}
cout << b; //b依旧可以在数组外使用
return 0;
}
解决了输入问题,接下来是输出了,vector的取数方法很简单,使用cout就可以,与string类似,但string可以整体输出,vector只能单个单个输出,这时就要用到循环了和取位了,取位和string一样 变量名[位数]
即可,同时也要注意,位数依旧是从0开始计数 ,由于是数组,那么当然也有 .size()
的存在,循环也就不难了,那么接下来就来输出一下;
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a;
a.push_back(1);
a.push_back(2);
int b = 5;
a.push_back(b); //和上面一样的输入
cout << a[0] << " " << a[1] << endl; //单个取位输出元素
// 输出:1 2
for (int i = 0; i < a.size(); i++) { //位数次循环遍历每一位,注意从0开始到size-1
cout << a[i] << " "; //输出遍历到的每一位
}
// 输出:1 2
// 1 2 15
return 0;
}
搞定!
5.常用函数(正式)
这里我们先把刚刚说过的两个列出来
.push_back()
.size()
那么vector还有哪些函数呢;首先想到的就是如何清空一个数组, .clear()
就可以做到。那么在我们写大型程序乃至应用时我可不希望一个数组一直占用这我的内存,甚至会有很多数组同时存在,这时清理空间是很重要的,但clear只能删除所有的元素,不会清理空间,这时我们就需要用到一个写法比较特殊的函数 vector<变量类型>().swap(数组名)
了;还有一个函数是 .pop_back()
他的用途是将数组最末尾的一个元素弹出(不是输出!!!) 下面是实战用法
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> a; //定义一个数组a
a.push_back(1);
a.push_back(2);
a.push_back(3); //多用push_back输入几个元素
cout << a.size() << endl; //查看一下数组的位数:3
a.pop_back(); //弹出最后一个元素
cout << a.size() << endl; //再看一下数组的位数:2
a.clear(); //清空数组
cout << a.size() << endl; //再看一下:0
vector<int>().swap(a); //释放内存
return 0;
}
小测验
没有错,章末小测验又来了
今天的内容非常简单,只是讲上面的内容写一遍而已,就当是一个巩固吧;
题目描述:
输入输出内容见输入格式&输出格式,请在最后清空数组并释放内存;
输入格式:
第一行一个整数n,表示需要输入的元素个数;
第二行n个元素,用空格隔开;
第三行一个整数a;
输出格式:
第一行输出所有第双数个元素,用空格隔开
第二行倒序输出所有元素,用空格隔开
第三行输出字符串末尾弹出a个元素后的最后一个元素
样例输入:
4
Thank you for reading!
2
样例输出:
you reading!
reading! for you Thank
you
答案:
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main() {
vector<string> s;
int n, a;
cin >> n;
for (int i = 0; i < n; i++) {
string x;
cin >> x;
s.push_back(x);
}
cin >> a;
for (int i = 0; i < s.size(); i++) {
if (i % 2 != 0) {
cout << s[i] << " ";
}
}
cout << endl;
for (int i = s.size() - 1; i >= 0; i--) {
cout << s[i] << " ";
}
cout << endl;
for (int i = 0; i < a; i++) {
s.pop_back();
}
cout << s[s.size() - 1];
s.clear();
vector<string>().swap(s);
return 0;
}
资瓷资瓷
Z C Z C
感谢资瓷orz