C++ 容器vector 理解

通过设置一些模版类STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。

与string 类一样vector 类是随标准C++引入的标准库的一部,为了使用vector 我们必须包含相关的头文件。

向量(vector) 连续存储的元素<vector>。使用vector 有两种不同的形式即所谓的数组习惯和STL习惯.

数组习惯:

vector <int> vec(10);

void simple_example()
{
const int elem_size = 10;
vector< int > ivec( elem_size );
int ia[ elem_size ];
for ( int ix = 0; ix < elem_size; ++ix )
ia[ ix ] = ivec[ ix ];
// ...
}

void print_vector( vector<int> ivec )
{
if ( ivec.empty() )
return;
for ( int ix = 0; ix < ivec.size(); ++ix )
cout << ivec[ ix ] << ' ';
}

// 把ia 的6 个元素拷贝到ivec 中
vector< int > ivec( ia, ia+6 );

第二个指针总是指向要被拷贝的末元素的下一位置标记出来的元素范围也可以是数组的一个子集例。

STL 习惯:

我们不是定义一个已知大小的vector 而是定义一个空vector
vector< string > text;


我们向vector 中插入元素不再是索引元素以及向元素赋值例如push_back()操作就是在vector 的后面插入一个元素下面的 while 循环从标准输入读入一个字符串序列
并每次将一个字符串插入到vector 中
string word;
while ( cin >> word ) {
text.push_back( word );
// ...
}
虽然我们仍可以用下标操作符来迭代访问元素
cout << "words read are: \n";
for ( int ix = 0; ix < text.size(); ++ix )
cout << text[ ix ] << ' ';

更典型的做法是使用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;

错误用法:

vector< int > ivec; //定义了一个空vector

再写这样的语句
ivec[ 0 ] = 1024;
就是错误的。因为ivec 还没有第一个元素我们只能索引vector 中已经存在的元素.

类似地当我们用一个给定的大小定义一个vector 时例如
vector<int> ia( 10 );
任何一个插入操作都将增加vector 的大小而不是覆盖掉某个现有的元素,例如:ia.push_back('a') ia将包含11个元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值