C++中vector类的笔记

来源:互联网 发布:网络准入控制 编辑:程序博客网 时间:2024/06/10 01:52

关于C++中的vector的一些学习记录

vector是C++中的一个数据结构,确切的说是一个类,相当于动态数组,当编程的时候无法知道自己需要多大的数组规模的时候可以使用vector节约空间和节省代码的作用(我理解vector无法实现节约时间的作用,因为极有可能是类似于C语言中的单链表的方式来实现的,那么就会存在申请内存的时间,肯定会消耗比单纯一次性申请足量的数组使用的时间要长)。

用法

  • 使用的时候首先需要包含vector头文件:#include<vector>
  • 还需要加上using namespace std;因为是命名空间std中的类。

声明方式

vector<元素数据类型> 变量名;
- vector<int> a;声明了一个int数组a[];,但是长度动态变化,可以向里面增加或者删除int元素;
- vector<char> a;声明了一个char数组a[];,但是长度动态变化,可以向里面增加或者删除char元素;
- 使用vector代替二维数组。只是需要声明一个一位数组向量即可,而一个数组的名字其实代表的就是他的首地址,所以只是需要声明一个地址的向量即可:vector<int*> a;,三维的表示方法则是vector<int**> a;
vector中常用的操作函数包含(有一些没有写到是暂时没有使用到过,以后会补充):
a.push_back();//在尾部增加一个数据
a.pop_back();//删除最后一个数据
a.at(idx);//传回指向索引idx的数据,如果idx越界,则抛出out_of_range
a.begin();//返回指向容器第一个元素的迭代器,是个地址
a.end()();//返回指向容器末端元素的下一个,是个地址,指向一个不存在的元素
a.front();//传回第一个数据
a.back();//传回最后一个数据,不检查该数据是否存在
a.max_size();//返回容器中最大数据的数量
a.capacity();
a.size();//返回容器中的元素个数
a.resize();//重新制定队列的长度
a.reserve();//保留适当的容量
a.erase(pos);//删除pos位置的元素,传回下一个数据的位置
a.erase(beg,end);//删除位置beg到位置end的数据,传回下一个数据的位置
a.clear();//移出容器中所有的数据
a.rbegin();//传回一个逆向队列的第一个数据
a.rend();//传回一个逆向队列的最后一个数据的下一个位置
a.empty();//判断容器是否为空
a.swap(b);//将a和b元素进行互换也可以通过swap(a,b);实现
a.assign();
a.shrink_to_fit();
a.crbegin();
a.crend();
a.cbegin();
a.cend();
a.emplace();
a.data();
a.insert(pos,elem);//在pos位置插入一个元素elem,传回新数据位置
a.insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值
a.insert(pos,beg,end);//在pos位置处插入位置beg到位置end之间的数据,无返回值
a.emplace_back();

再次把之前联想回文数那道题目的vector方法贴上来,顺便自己再琢磨琢磨vector实现二维数组的方法与要点:

#include<iostream>#include<vector>using namespace std;bool isPalindrome(int x){    vector<int> eve;    int i;    cout<<"input num is "<<x<<endl;    while(x/10 >= 1)    {        eve.push_back(x % 10);        x = x / 10;    }    eve.push_back(x);    int len = eve.size();    for(i = 0;i <= (len /2);i++)    {        int tmp1 = eve.at(i);        int tmp2 = eve.at(len - i - 1);        cout<<tmp1<<" and "<<tmp2<<endl;        if(tmp1 != tmp2)        {            return false;        }    }    return true;}void main(void){    int x;    cin>>x;    while(x<0)    {        cout<<"input must larger than or equal to 0!"<<endl;        cin>>x;    }    cout<<isPalindrome(x)<<endl;    system("pause");}
0 0
原创粉丝点击