本文以c的向量用法为例。 请分享,仅供参考。 具体如下。
一.概述
vector是c标准模板库的一部分,是一个多功能的模板类和函数库,可以处理多个数据结构和算法。 向量是可以存储各种类型对象的容器。 简而言之,向量是可以存储任意类型的动态数组的容器,可以动态调整大小。
例如:
//c语言样式
int myHouse[100];
//采用载体
vectorvecmyhouse(100;
通过以上定义,vecMyHouse可以存储100个int类型的数据。
1 .可以像通常的排列那样访问
例如:
vecMyHouse[50]=1024;
2 .可以按顺序向容器中填充数据
例如:
int i=0;
for (; i 25; I )
{
VECmyhouse.push_back(1;
}
3 .也可以动态调整大小。 这通过以下语句实现
将容器大小调整为400,以便容器可以存储400个int类型的数据
例如:
vecmyhouse.resize(400;
4 .也可以在容器中包含自定义数据类型
例如:
自定义类
class Cmyclass
{
(;
定义盛放class的容器
vector vecMyHouse;
5 .定义容器时可以指定初始值
定义存储//100个int型数据的容器,使初始值为0
vectorvecmyhouse (100,0 );
6 .可以将一个容器中的对象指定给另一个容器
例如:
定义存储//100个int型数据的容器,使初始值为0
vectorvecmyhouse (100,0 );
//定义新容器,内容与上述容器相同
vector myVec;
myVec=vecMyHouse;
二、以上为vector容器简要介绍,以下详细介绍其他功能。
1 .要使用向量,头文件中必须包含以下代码:
#包含
2 .向量属于std命名域,需要命名限制,可以放在文件开头
using std:vector;
或者
用户命名空间STD;
或者,在使用向量的代码前面加前缀
例如:
std:vector myHouse;
3 .向量提供以下函数或操作:
部分常见功能如下
//定义向量
std:vector c;
可用功能:
c .删除c.clear ()容器中的所有数据。
c.empty ) )判断容器是否为空。
c .删除错误(pos ) pos位置的数据
c.erase(beg,end )删除[beg,end]区间数据
c.front ) )返回第一个数据。
c.insert(pos,elem )在pos的位置插入elem的副本
c .删除c.pop_back ()最后一个数据。
c.push_back(Elem )在末尾添加数据。
c .重新设置重置(num )容器的大小
c.size ) )返回到容器的实际数据数量。
c.begin ) )返回指向容器的第一个元素的迭代器
c.end ) )返回指向容器最后一个元素的迭代器
三.说明什么是迭代器
迭代器相当于指针。 示例:
//变量时,使用指针指向对应的变量
//稍后可以使用*指针操作该变量
int a=10;
int *p;
p=a;
使用指针操作变量
例如,*p=11; //操作时a为11
对于容器,请使用迭代器操作容器中相应位置的值
如果迭代器指向容器中的位置,则可以使用*迭代器操作该位置
//定义向量
std:vector myVec;
//添加10个元素
for(intj=0; j10; j )
{
>myVec.push_back(j);
}
// 定义一个迭代器
std::vector::iterator p;
// 指向容器的首个元素
p = myVec.begin();
// 移动到下一个元素
p ++;
// 修改该元素赋值
*p = 20 ; //< 则myVec容器中的第二个值被修改为了20
// 循环扫描迭代器,改变所有的值
p = myVec.begin();
for( ; p!= myVec.end(); p++ )
{
*p = 50;
}
以上简单讲述了vector的用法,仅供入门之用,下面以实例形式继续加以说明。
1.vector 的数据的存入和输出:
#include
#include
#include
using namespace std;
void main()
{
int i = 0;
vector v;
for( i = 0; i < 10; i++ )
{
v.push_back( i );//把元素一个一个存入到vector中
}
//对存入的数据清空
for( i = 0; i < v.size(); i++ )//v.size() 表示vector存入元素的个数
{
cout << v[ i ] << " "; //把每个元素显示出来
}
cont << endl;
}
注:你也可以用v.begin()和v.end() 来得到vector开始的和结束的元素地址的指针位置。
你也可以这样做:
vector::iterator iter;
for( iter = v.begin(); iter != v.end(); iter++ )
{
cout << *iter << endl;
}
2. 对于二维vector的定义。1)定义一个10个vector元素,并对每个vector符值1-10。
#include
#include
#include
using namespace std;
void main()
{
int i = 0, j = 0;
//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。
//所以每一行的长度是可以变化的。之所以用到vector(0)是对vector初始化,否则不能对vector存入元素。
vector< vector > Array( 10, vector(0) );
for( j = 0; j < 10; j++ )
{
for ( i = 0; i < 9; i++ )
{
Array[ j ].push_back( i );
}
}
for( j = 0; j < 10; j++ )
{
for( i = 0; i < Array[ j ].size(); i++ )
{
cout << Array[ j ][ i ] << " ";
}
cout<< endl;
}
}
2)定义一个行列都是变化的数组。
#include
#include
#include
using namespace std;
void main()
{
int i = 0, j = 0;
vector< vector > Array;
vector< int > line;
for( j = 0; j < 10; j++ )
{
Array.push_back( line );//要对每一个vector初始化,否则不能存入元素。
for ( i = 0; i < 9; i++ )
{
Array[ j ].push_back( i );
}
}
for( j = 0; j < 10; j++ )
{
for( i = 0; i < Array[ j ].size(); i++ )
{
cout << Array[ j ][ i ] << " ";
}
cout<< endl;
}
}
使用 vettor erase 指定元素,示例如下:
#include "iostream"
#include "vector"
using namespace std;
int main()
{
vector arr;
arr.push_back(6);
arr.push_back(8);
arr.push_back(3);
arr.push_back(8);
for(vector::iterator it=arr.begin(); it!=arr.end(); )
{
if(* it == 8)
{
it = arr.erase(it);
}
else
{
++it;
}
}
cout << "After remove 8:n";
for(vector::iterator it = arr.begin(); it < arr.end(); ++it)
{
cout << * it << " ";
}
cout << endl;
}
希望本文所述实例对大家掌握C++中vector用法起到一定的帮助作用。