C++中的vector 用法解析

     一、概述

    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()

  

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

时间: 2024-12-21 17:09:13

C++中的vector 用法解析的相关文章

MATLAB中冒号的用法解析

MATLAB中冒号的用法解析 1.: 表示所有的意思. (1)如:a(1,:) 表示a的第1行,示例: 结果: 同样的如果a(2,:)表示a的第2行 (2)反过来,a(:,2) 表示a的第3列,示例: 结果: (3)如果不写数字即a( : ),则表示全部元素,并且返回的结果a变为列向量.示例: 结果: 2.: 表示到,表示一个范围. (1)如a(1:2,3) 表示第1行到第2行的第3列元素.示例: 结果: (2)a(1:2,:) 表示第1行到第2行的所有元素.示例: 结果: (3)同样有a(:,

熟练掌握js中this的用法,解析this在不同应用场景的作用

由于其运行期绑定的特性,JavaScript 中的 this 含义要丰富得多,它可以是全局对象.当前对象或者任意对象,这完全取决于函数的调用方式. JavaScript 中函数的调用有以下几种方式:作为函数调用,作为对象方法调用,作为构造函数调用,和使用 apply 或 call 调用.下面我们将按照调用方式的不同,分别讨论 this 的含义. 情况一:纯粹的函数调用 这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global. 1.函数也可以直接被调用,此时 this 绑定到

java中runnable的用法解析

1.类结构,首先有两个类,一个是测试类Main,一个是线程类MyThread. 2.MyThread package com.test.thread; import java.lang.management.ThreadInfo; public class MyThread implements Runnable { String name=null; MyThread(String name) { this.name=name; } @Override public void run() {

ObjectiveC中的block用法解析

Block Apple 在C, Objective-C,C++加上Block这个延申用法.目前只有Mac 10.6 和iOS 4有支持.Block是由一堆可执行的程序组成,也可以称做没有名字的Function(Anonymous function).如果是Mac 10.6 或 iOS 4.0 之前的平台可以利用 http://code.google.com/p/plblocks/这个project得以支持Block语法.Apple有一个叫做GCD(Grand Central Dispach)的新

oracle中merge into用法解析

merge into的形式: MERGE INTO [target-table] A USING [source-table sql] B ON([conditional expression] and [...]...) WHEN MATCHED THEN [UPDATE sql] WHEN NOT MATCHED THEN [INSERT sql] 作用:判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表但是有很多可选项,如下:1.正常模式 2.只

STL中的Vector相关用法

STL中的Vector相关用法 标准库vector类型使用需要的头文件:#include <vector>. vector 是一个类模板,不是一种数据类型,vector<int>是一种数据类型. Vector的存储空间是连续的,list不是连续存储的. 1. 定义和初始化 vector< typeName > v1; //默认v1为空,故下面的赋值是错误的v1[0]=5;//v2是v1的一个副本,若v1.size()>v2.size()则赋值后v2.size()被

sql中的group by 和 having 用法解析

--sql中的group by 用法解析:-- Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.--它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理.--注意:group by 是先排序后分组:--举例子说明:如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术select DepartmentID as '部门名称',COUNT(*) a

js中indexof的用法详细解析

本篇文章主要是对js中indexof的用法进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 String.IndexOf 方法 (Char, [startIndex], [count]) 报告指定字符在此实例中的第一个匹配项的索引.搜索从指定字符位置开始,并检查指定数量的字符位置. 参数 value 要查找的 Unicode 字符. 对 value 的搜索区分大小写. startIndex(Int32) 可选项,搜索起始位置.不设置则从0开始. count(Int32) 可选项,要

转载 sql中的group by 和 having 用法解析

sql中的group by 和 having 用法解析 --sql中的group by 用法解析:-- Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.--它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理.--注意:group by 是先排序后分组:--举例子说明:如果要用到group by 一般用到的就是“每这个字” 例如说明现在有一个这样的表:每个部门有多少人 就要用到分组的技术select Depar