Vector总结

Vector总结

一、简介

C++ vector类为内置数组提供了一种替代表示,与string类一样 vector 类是随标准 C++引入的标准库的一部分,使用时需包含头文件: #include <vector> , vector属于std命名域的,因此需要通过命名限定 , 建议使用全局的命名域方式:using namespace std

vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数据安排的角度来讲,和数组极其相似,不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可再改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。

vector的扩充机制:按照容器现在容量的一倍进行增长。vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。这时原有指向旧内存空间的迭代器已经失效,所以当操作容器时,迭代器要及时更新。

二、常用函数

函数 功能
clear() 移除容器中的所有数据
empty() 判断容器是否为空
size() 返回容器中元素的个数
[index]、at(index) 返回索引为index的元素
erase(pos) 删除pos位置处的数据
erase(beg,end) 删除[bed,end]区间的数据
front() 返回第一个元素
insert(pos,elem) 在pos位置处插入一个元素
pop_back() 删除最后一个元素
push_back(elem) 在容器某尾插入一个元素
resize(num) 重新设置容器的大小
begin()、end() 返回容器首尾元素的迭代器

三、常用算法

使用时需要包含头文件:#include<algorithm>

函数 功能
sort(a.begin(),a.end()); 对a中从a.begin()(包括它)到a.end()(不包括它)的元素进行从小到大排列
reverse(a.begin(),a.end()) 对a中从a.begin()(包括它)到a.end()(不包括它)的元素进行倒置
copy(a.begin(),a.end(),b.begin()+1) 把a中的从a.begin()(包括它)到a.end()(不包括它)的元素复制到b中,从b.begin()+1的位置(包括它)开始复制,覆盖掉原有元素
find(a.begin(),a.end(),10) 在a中的从a.begin()(包括它)到a.end()(不包括它)的元素中查找10,若存在返回其在向量中的位置

四、使用示例

1、初始化
vector<int> a ;                             //声明一个int型向量a
vector<int> a(10) ;                         //声明一个初始大小为10的向量
vector<int> a(10, 1) ;                      //声明一个初始大小为10且初始值都为1的向量
vector<int> b(a) ;                          //声明并用向量a初始化向量b
vector<int> b(a.begin(), a.begin()+3) ;     //将a向量中从第0个到第2个(共3个)作为向量b的初始值
2、vector()的遍历

方法一:使用数组下标

for(int i=0;i<vec.size();i++)
    cout<<vec[i];

方法二:使用迭代器

vector<int>::iteator itr = vec.begin();
for(;itr != vec.end();itr++)
    cout<< *itr;
3、vector()二维数组
vector<vector<int> > vec;                         //定义vector二维数组

for(int i=0;i<vec.size();i++)                     //遍历vector二维数组
    for(int j=0;j<vec[i].size();j++)
        cout<<vec[i][j];
发布了48 篇原创文章 · 获赞 5 · 访问量 2605

猜你喜欢

转载自blog.csdn.net/Mr_robot_strange/article/details/104521688