C++中vector类的笔记

关于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");
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值