C++中vector 是一个十分有用的容器,小渣渣学了一学期的c++也没有怎么整理,今天就借着复习把vector的常见的用法给整理一下:(纯属个人意见,有任何不对的地方请指正,谢谢)
Basement:
1).需要引入头文件 #include<vector>
2).vector作为一个容器是有类型的,因此声明的时候需要进行如下声明:
vector<typename> name;
fg: vector<int> vct; //一个储存int类型的向量(vector)
3).它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.
(referrence by :http://blog.youkuaiyun.com/hancunai0017/article/details/7032383)
4).了解一下vector的底层的原理吧,大致就是如上一条所说的那样,其实大致相当于是一个动态数组,但是其结构是这样
设如下的一个vector,所放的data的size为n[用数组的道理讲就是0-(n-1)]
iterator(iterator迭代器) | begin | …… | end-1 | end |
data | data[0] | …… | data[n-1] | |
referrence(引用) | front | …… | back |
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的区别