大家好呀!最近在家里闲来无事,deidei便想着想要学点什么。 于是便整理了一下vector容器的用法。 要想熟练掌握一个工具的用法,感觉光靠看网上的解释和用法总感觉还是无法系统的去了解vector的用法,多多少少还是感觉知识有些被碎片化。 还是自己动手来写一下才能熟练掌握,毕竟“实践出真知”嘛!于是便自己写了一个测试用例来展示vector各个函数的用法。写完了一下之后果然是对于vector的用法感到更加熟练了呢! 接下来贴上这段代码,希望对初学vector的小伙伴有所帮助。(不过还是希望大家能自己动手多写写,不要总是依赖网上的例子)
#include<iostream>
#include<vector>
#include<string>
using namespace std;
void to_be_continued(const char* promp)
{
cout << promp << endl;
char c = 0;
while (c != '\n') {
c = getchar();
}
}
template<typename T>
void PrintAll(const char* promp,const vector<T> v)
{
cout << promp;
for (auto i = v.begin(); i != v.end(); i++) {
cout << *i<<" ";
}
cout << endl;
}
int main()
{
if (1) {
to_be_continued("下面开始示范构造vector容器,按回车继续......");
vector<int> vi;
vector<int> vi1(5, 6);
vector<char> vc(5, 'a');
vector<string> vs(5, "hello");
vector<int> cvi1(vi1);
char arr[3] = {'a','b','c'};
vector<char> arr_v(arr,arr+3);
PrintAll("vector<int> vi构造实际输出:",vi);
PrintAll("vector<int> vi1(5, 6)构造实际输出:", vi1);
PrintAll("vector<char> vc(5, 'a')构造实际输出:", vc);
PrintAll("vector<string> vs(5, \"hello\")构造实际输出:", vs);
PrintAll("vector<int> cvi1(vi1)构造实际输出:", cvi1);
PrintAll("vector<char> arr_v(arr,arr+3)构造实际输出:", arr_v);
cout << endl;
to_be_continued("构造vector容器示范结束,按回车继续......");
}
if (1) {
to_be_continued("下面开始测试front()和back()的使用,按回车继续......");
vector<int> v = { 1,2,3,4 };
cout << "v.front()应当输出1,实际输出:" << v.front() << endl;
cout << "v.back()应当输出4,实际输出:" << v.back()<<endl;
to_be_continued("测试front()和back()的使用结束,按回车继续......");
}
if (1) {
to_be_continued("下面开始测试size()、resize()、capacity(),empty()的使用,按回车继续......");
vector<char> hello = { 'h','e','l','l','o' };
cout << "输出hello.size(),应当输出5,实际输出:" << hello.size() << endl;
hello.resize(10);
cout << "hello.resize(10),hello.capacity应当输出10,实际输出:" << hello.capacity() << endl;
cout << "hello.size()此时应当输出10,实际输出:" << hello.size() << endl;
cout << "hello.empty()应当输出0,实际输出:" << hello.empty() << endl;
hello.resize(15,'!');
PrintAll("hello.resize(15,'!'),实际输出:", hello);
hello.resize(0);
cout << "hello.empty()应当输出1,实际输出:" << hello.empty() << endl;
to_be_continued("按回车继续......");
}
if (1) {
to_be_continued("下面开始测试push_back(),pop_back(),swap()的使用,按回车继续......");
vector<char> vc;
for (int i = 0; i < 26; i++) {
vc.push_back('A' + i);
}
PrintAll("试验push_back,26个字母:", vc);
for (int i = 0; i < 13; i++) {
vc.pop_back();
}
PrintAll("试验pop_back,删去末尾13个字母:", vc);
vector<char> hell = {'h','e','l','l'};
PrintAll("打印交换前hell:", hell);
PrintAll("打印交换前的vc:", vc);
vc.swap(hell);
PrintAll("打印交换后的hell:", hell);
PrintAll("打印交换后的vc:", vc);
to_be_continued("按回车继续......");
}
if (1) {
to_be_continued("下面开始测试rbegin(),rend()的使用,按回车继续......");
vector<int> vi = { 1,2,3,4,5,6,7,8,9,0 };
PrintAll("正序输出:", vi);
cout << "下面展示逆序输出:";
for (auto i = vi.rbegin(); i != vi.rend(); i++) {
cout << *i << " ";
}
to_be_continued("按回车继续......");
}
if (1) {
to_be_continued("下面开始测试erase(),insert(),clear()的使用,按回车继续......");
vector<int> vi = { 1,2,3,4,5 };
PrintAll("vi原来的样子:", vi);
vi.erase(vi.begin());
PrintAll("vi删去第一个元素之后:", vi);
vi.insert(vi.begin(), 1);
PrintAll("vi把第一个元素加上去之后:", vi);
vi.clear();
cout << "用clear()成员函数之后,查看empty()的值:" << vi.empty()<<endl;
to_be_continued("按回车继续......");
}
if (1) {
to_be_continued("下面开始测试p重载运算符,以及at()的使用,按回车继续......");
vector<char> china = { 'c','h','i','n','a' };
cout << "输出china,用下标的方式逐项输出:" << endl;
for (int i = 0; i < 5; i++) {
cout << china[i] << " ";
}
cout <<endl<< "输出china,用at()的方式逐项输出:" << endl;
for (int i = 0; i < 5; i++) {
cout << china.at(i)<< " ";
}
cout << endl;
to_be_continued("按回车继续......");
}
return 0;
}
- 在vector中要想要遍历vector的所有元素,有以下几种方法:(目前发现的,或许还有其他方法)
法一:用迭代器定义指针i(注意点:别忘了在vector::iterator前面加typename,不然会报错)
template<typename T>
void traverse(const vector<T> v)
{
typename vector<T>::iterator i;
for (i = v.begin(); i != v.end(); i++) {
cout << *i<<" ";
}
cout << endl;
}`
法二:用自动变量auto,最不容易出错,也是最适用于遍历容器的方法
template<typename T>
void traverse(const vector<T> v)
{
for (auto i = v.begin(); i != v.end(); i++) {
cout << *i<<" ";
}
cout << endl;
}
法三:用原始方法:
template<typename T>
void traverse(const vector<T> v){
for(int i=0;i<v.size();i++){
cout<<v[i]<<" ";
}
}
希望以后可以继续坚持一边学习,一边写博文记录总结吧! 把在学习中的一些所见所想分享出来,一方面是督促自己这个小白加懒虫每天学点新知识的习惯,记录下自己的成长,另一方面也希望可以结交更多志同道合的小伙伴,在编程这条路上越走越远! 加油加油!!
|