现在的位置: 首页 > 综合 > 正文

vector 容器

2013年09月06日 ⁄ 综合 ⁄ 共 1168字 ⁄ 字号 评论关闭

为了使用vector 我们必须包含相关的头文件

#include <vector>

 

vector< int > ivec( 10, -1 );
定义了ivec 它包含十个int 型的元素每个元素都被初始化为-1

对于内置数组我们可以显式地把数组的元素初始化为一组常量值例如
int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
我们不能用同样的方法显式地初始化vector 但是可以将vector 初始化为一个已有数
组的全部或一部分只需指定希望被用来初始化vector 的数组的开始地址以及数组最末元素
的下一位置来实现例如
// 把ia 的6 个元素拷贝到ivec 中
vector< int > ivec( ia, ia+6 );

// 拷贝3 个元素ia[2], ia[3], ia[4]
vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );

 

与内置数组不同vector 可以被另一个vector 初始化或被赋给另一个vector 例如
vector< string > svec;
void init_and_assign()
{
// 用另一个vector 初始化一个vector
vector< string > user_names( svec );
// ...
// 把一个vector 拷贝给另一个vector
svec = user_names;
}

push_back()操
作就是在vector 的后面插入一个元素

 

更典型的做法是使用vector 操作集中的begin()和end()所返回的迭代器iterator

cout << "words read are: /n";
for ( vector<string>::iterator it = text.begin();
it != text.end(); ++it )
cout << *it << ' ';
cout << endl
iterator 是标准库中的类它具有指针的功能
*it;
对迭代器解引用并访问其指向的实际对象
++it;

===============

注意不要混用这两种习惯用法例如下面的定义
vector< int > ivec;
定义了一个空vector 再写这样的语句
ivec[ 0 ] = 1024;
就是错误的因为ivec 还没有第一个元素我们只能索引vector 中已经存在的元素size()
操作返回vector 包含的元素的个数

 

类似地当我们用一个给定的大小定义一个vector 时例如
vector<int> ia( 10 );
任何一个插入操作都将增加vector 的大小而不是覆盖掉某个现有的元素这看起来好
像是很显然的但是下面的错误在初学者中并不少见
const int size = 7;
int ia[ size ] = { 0, 1, 1, 2, 3, 5, 8 };
vector< int > ivec( size );
for ( int ix = 0; ix < size; ++ix )
ivec.push_back( ia[ ix ]);
程序结束时ivec 包含14 个元素ia 的元素从第八个元素开始插入

抱歉!评论已关闭.