码迷,mamicode.com
首页 > 编程语言 > 详细

C++中的vector 用法解析

时间:2016-12-27 23:16:36      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:元数据   动态改变   容器   结构   对象   log   10个   blog   语言   

      

     一、概述

    vector 是C++标准模板库的部分内容,他是一个多功能的,能够操作多种 数据结构和算法 的模板类和函数库。

    vector 是一个容器,它能够存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,可以动态改变大小。 

1 //C语言风格
2 int myhouse[100];
3 //采用vector
4 vector<int>  vecmyhouse(100);

     当如上定义后,vecmyhouse就可以存放100个int 型的数据了。

1 它可以像普通数组一样访问  

1 vecmyhouse[50] = 1024;

 

 

 

2 你可以顺序的向容器中填充数据

 

1 int i=0;
2 for(;i<25;i++)
3 {
4     vecmyhouse.push_back(1);
5 }

 

 

 

 3 可以动态的改变它的大小,通过下面这条语句实现

  将容器的大小改为400,这样容器中就可容纳400个int 型数据了

1 vecmyhouse.resize(400);

 

 

 

 4 可以在容器中装入自定义的数据类型

 

1 //自定义一个class
2 class cmyclass
3 {
4    。。。。。
5 };
6 //定义一个存放class的容器
7 vector<cmyclass>   vedmyhouse;

 

 

 

 5 可以在定义容器时为他赋初值

 

1 //定义一个容纳100个int型数据的容器,初值赋为0
2 vector<int>   vecmyhouse(100,0);

 

 

 

 6 可以把一个容器的对象赋值给另外一个容器

 

1 //定义一个容纳100个int型数据的容器,初值赋为0
2 vector<int> vecmyhouse(100,0);
3 //定义一个新的容器,内容与上述容器一样
4 vector<int>  myvec;
5 myvec = vecmyhouse;

 

 

 

 

二、 以上是vector容器的简单介绍,下面将详细介绍它的其他功能:

  1 为了使用vector ,必须在你的头文件中包含下面的代码:

1 #include <vector>

 

 

 

   2 vector属于std命名域的,因此需要通过命名限定,可以在文件开头加上

 

1 using std::vector;  
or
using namespace std;
or
std::vector<int> myhouse; //直接加上前缀

 

 

 

   3 vector的声明

   vector<ElemType> c;   创建一个空的vector

   vector<ElemType> c1(c2); 创建一个vector c1,并用c2去初始化c1

   vector<ElemType> c(n) ; 创建一个含有n个ElemType类型数据的vector;

   vector<ElemType> c(n,elem); 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;

   c.~vector<ElemType>(); 销毁所有数据,释放资源;

 

  4 vector 容器中常用的函数(c为一个容器对象)

  c.push_back(elem);         在容器的最后位置添加一个元素elem

  c.pop_back();                 删除容器最后位置处的元素

  c.at(index);                    返回指定index位置处的元素

  c.begin();                       返回指向容器最开始位置数据的指针

  c.end();                          返回指向容器最后第一个数据单元的指针+1

  c.front();                        返回容器最开始单元数据的引用

  c.back();                         返回容器最后一个数据的引用

  c.max_size();                  返回容器的最大容量

  c.size();                         返回当前容器中实际存放元素的个数

  c.capacity();                   同c.size()  

  c.resize();                      重新设置vector的容量

  c.reserve();                    同c.resize(); 

  c.erase(p);                     删除指针p指向位置的数据,返回指向下一个数据位置的指针(迭代器)

  c.erase(begin,end);         删除begin,end区间的数据,返回指向下一个数据位置的指针(迭代器)

  c.clear();                        清除所有数据

  c.rbegin();                      将vector反转后的开始指针返回(其实就是原来end-1)

  c.rend();                         将vector反转后的结束指针返回(其实就是原来的begin-1)

  c.empty();                      判断容器是否为空,若为空返回true,否则返回false

  c1.swap(c2);                   交换俩个容器中的数据

  c.insert(p,elem);              在指针p指向的位置插入数据elem,返回指向elem位置的指针

  c.insert(p,n,elem);           在位置p插入n个elem数据,无返回值

  c.insert(p,begin,end)        在位置p插入在区间[begin,end)的数据,无返回值

 

  三、下面描述一下什么是迭代器

   迭代器相当于指针

1 //对于变量而言,使用指针指向对应的变量
2 //以后就可以使用 * 加指针来操作变量了
3 int a = 10;
4 int *p;
5 p = &a;

 

 

 

   使用指针操作该变量,例如:*p = 11; // 操作后a变为 11

   对于容器,使用迭代器操作容器中对应位置的值

   当迭代器指向了容器中的某位置,则可以使用 * 加迭代器操作该位置了

 

1 //定义一个vector
2 std::vector<int>  myvec;
3 //添加10个元素
4 for(int  j=0; j<10; j++)
5 {
6    myvec.push_back(j);
7 }

 

 1 // 定义一个迭代器  
 2 std::vector<int>::iterator p;  
 3 // 指向容器的首个元素  
 4 p = myVec.begin();  
 5 // 移动到下一个元素  
 6 p ++;  
 7 // 修改该元素赋值  
 8 *p = 20 ; //< 则myVec容器中的第二个值被修改为了20  
 9 // 循环扫描迭代器,改变所有的值  
10 p = myVec.begin();  
11 for( ; p!= myVec.end(); p++ )  
12 {  
13 *p = 50;  
14 }  

 

 

 

 四  实例

 (1)数据的输入和删除。push_back()与pop_back()

  

...................未完待续

 

C++中的vector 用法解析

标签:元数据   动态改变   容器   结构   对象   log   10个   blog   语言   

原文地址:http://www.cnblogs.com/wyuzl/p/6227536.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!