C++中vector向量的用法(自整)

C++中vector 是一个十分有用的容器,小渣渣学了一学期的c++也没有怎么整理,今天就借着复习把vector的常见的用法给整理一下:(纯属个人意见,有任何不对的地方请指正,谢谢)


Basement:


1).需要引入头文件  #include<vector>

2).vector作为一个容器是有类型的,因此声明的时候需要进行如下声明:

       vector<typename> name;

fg:    vector<int> vct; //一个储存int类型的向量(vector)

3).它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.       

  (referrence by :http://blog.csdn.net/hancunai0017/article/details/7032383)

4).了解一下vector的底层的原理吧,大致就是如上一条所说的那样,其实大致相当于是一个动态数组,但是其结构是这样

设如下的一个vector,所放的data的size为n[用数组的道理讲就是0-(n-1)]

iterator(iterator迭代器)begin……end-1end
datadata[0]……data[n-1]
referrence(引用)front……back
注意:一定要注意看出获取指针和获取引用的区别!//暂时将iterator和指针看成差不多的东东

5).既然我们都将vector比作了一个动态数组,那么vector并不是一个set,因此它是可以添加重复的元素的!^o^

(因此往往都会出现如何将vector当成一个set用?即不能添加重复元素的问题,即使添加了,在vector中只存在一个,因此需要写出判断,当遇到重复的元素的时候就不添加了……PS:感觉这个方法有些蠢,勿见怪!)


Extension:

下面我们就来介绍一下vector常用的一些方法,估计这才是小伙伴儿们想看到的吧…………来咯来咯,莫急

先定义一个vector

<pre name="code" class="cpp"><span style="font-family:Comic Sans MS;font-size:14px;color:#993399;">#include<iostream>
#include<vector>

using namespace std;

int main(){
vector<int> vec;

for(int i = 0 ; i < 10 ; i++)
vec.push_back(i+1);
return 0;
}</span>


 

接下来我们就在这个vec对象的基础上来讲解vector类的一些基本方法:


vec.push_back(int a); //将a插入到vec向量对象的尾部

vec.pop_back(); //去掉最后一个数据,其返回值是void,不要和stack,queue之类的ADT混淆


vec.at(5); //同vec[5]即是vec的第六个元素,因为下标是从0开始的


vec.begin();//获得vec中第一个元素的指针iterator(迭代器)

vec.end();//返回vec中的最后一个元素的指针iterator(迭代器)+1(详见Basement(4)表格)

[对上面的来说,可以通过vector<int>::iterator it = vec.begin();来承接,不过一定要记住这个是指针变量,如果需要取里面的值需要*(it),并且既然是指针那么可以通过it++或者it+1等操作来进行指针的移动]


vec.front();//返回的是vec中的第一个元素的引用

vec.back();//返回的是vec中的最后一个元素的引用


vec.size();//vec当前的大小即该数组的大小,存了多少个数据


vec.erase(i);//传入对应位置的iterator(迭代器),删除该位置的元素

vec.erase(i,j);//将[i,j)位置上的元素删除

[注意,这里的i和j指的是对应位置上的iterator,于是可见begin&end有多么地重要了吧!2333,因为其余位置上的iterator基本上是经过begin或end的对应的指针iterator(迭代器)移动获得的]

iterator和指针pointer是有区别的!!(点击查看二者区别)


vec.resize(int n);//将向量元素的格式调整为n个,多则删(从尾部一个个删),少则补,补的值为随机值

vec.resize(int n,int value);//将向量元素的格式调整为n个,多则删(从尾部一个个删),少则补,补的值为value


vec.clear();//将vec清空,of course 对应的size也变为0了(亲测)

vec.empty();//判断vec是否为空,如果为空(size==0),返回true,反之返回false


拿insert来详解

iterator insert( iterator loc, const TYPE &val ); 
void insert( iterator loc, size_type num, const TYPE &val ); 
void insert( iterator loc, input_iterator start, input_iterator end ); 


insert() 函数有以下三种用法: 

在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器, 
在指定位置loc前插入num个值为val的元素 
在指定位置loc前插入区间[start, end)的所有元素 . 


//暂时就是这么些如果想要拓展请点击这里-->关于vector的 capacity和size、reserve和resize的区别




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值