开发者社区> 飞天小橘子> 正文

C++中vector的用法详解

简介: c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 1.头文件#include. 2.变量声明:         2.1 例:声明一个int向量以替代一维的数组:vector a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。
+关注继续查看
vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.
1.头文件#include<vector>.
2.变量声明:
        2.1 例:声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。
        2.2 例:用vector代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即:vector <int *> a.同理想用向量代替三维数组也是一样,vector <int**>a;再往上面依此类推.
 3. 详细的函数实现功能:其中vector<int> ve.
           ve.clear()         清空容器中所有数据。
           ve.empty()         判断容器是否为空。
           ve.erase(pos)        删除pos位置的数据
        ve.erase(beg,end) 删除[beg,end)区间的数据
           ve.front()         传回第一个数据。
ve.back() 传回最后一个数据,不检查这个数据是否存在
           ve.insert(pos,elem)  在pos位置插入一个elem拷贝
           ve.pop_back()     删除最后一个数据。
           ve.push_back(elem) 在尾部加入一个数据。
           ve.resize(num)     重新设置该容器的大小
           ve.size()         回容器中实际数据的个数。
           ve.begin()           返回指向容器第一个元素的迭代器
          ve.end()             返回指向容器最后一个元素的迭代器
ve.reserve()     改变当前vecotr所分配空间的大小
ve.capacity() 容器容量
ve.at(idx)传回索引idx所指的数据,如果idx越界,抛出out_of_range
ve.assign(beg,end):将[beg; end)区间中的数据赋值给ve
        ve.assign(n,elem):将n个elem的拷贝赋值给ve
ve.~ vector <Elem>() 销毁所有数据,释放内存
4.函数实现举例:
假定你想建立一个容纳1-1000值的vector<int>
4.1
vector<int> v;
for (int i = 1; i <= 1000; ++i)
v.push_back(i);
在大多数STL实现中,这段代码在循环过程中将会导致2到10次重新分配。
4.2
vector<int> v;
v.reserve(1000); //使用reserve()函数提前设定容量大小
for (int i = 1; i <= 1000; ++i)
v.push_back(i);
这在循环中不会发生重新分配。
4.使用下标访问元素
cout<<ve[0]<<endl; //记住下标是从0开始的
5.使用迭代器访问元素
vector<int>::iterator it; //用来遍历或者指向容器里面的元素
for(it=ve.begin();it!=ve.end();it++)
{
cout<<*it<<endl;
}
6.插入和删除元素
 ve.insert(ve.begin()+i,a); 在第i+1个元素前面插入a;
ve.erase(ve.begin()+2); 删除第3个元素
ve.erase(ve.begin()+i,ve.end()+j); 删除区间[i,j-1]; 区间从0开始

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,大概有三种登录方式:
9059 0
c++ map 类型用法
#include #include using namespace std;class myclass{typedef map MateAmount_type;typedef MateAmount_type::value_type value_type;private:        .
597 0
C++ 学习小程序之 map 的用法
1. map::at 1 #include 2 #include 3 #include 4 using namespace std; 5 6 int main(){ 7 map mymap = { 8 {"alpha", 0}, ...
719 0
继承用法大全——c++面向对象编程(必看)
继承用法大全——c++面向对象编程(必看)
21 0
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
19693 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
17986 0
c/c++ 宏中"#"和"##"的用法
c/c++ 宏中"#"和"##"的用法2007年05月14日 星期一 上午 10:19一、一般用法我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起.用法:#i nclude#i ncludeusing namespace std; #define STR(s) #s#defi...
625 0
83
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载