C++之vector学习

1 调用头文件

vector是一个类模板不是数据类型,但可以定义多种数据类型,vector <类型> 指定其保存元素的类型,如vector <int>是数据类型。

使用如下方式调用

#include <vector>

using std::vector;


2 申明(尖括号描述指定类型)

vector<int> ivec;

vector<Sales_item> Sales_vec;   Sales_item为自定义类型


3 定义和初始化

3.1 基本模版

 vector<T> v1;           vector保存类型为T的对象。默认构造函数,v1为空。

 vector<T> v2(v1);     v2是v1的一个副本

 vector<T> v3(n, i);    v3中包含n个值为i的元素

 vector<T> v4(n);       v4中函数n个副本(值被默认初始化)

3.2 初始化和默认初始化

vector <int> (10, -1)         10个int元素,每个均是-1

vector <string> (10, "hi")  10个string元素,每个均是hi

vector <int> (10)         10个int元素,默认初始化为0

vector <string> (10)  10个string元素,默认初始化为空

vector <string> str(10, null);      报错

vector <string> str(10, "null");    将字符串null复制给str

vector < vector <int> > val(10);  编译报错,vector <int>不能作为vector的类型

vector的对象可动态增加,增加效率高,当元素值已知时,最好通过动态添加元素让其增加,而非向C或者JAVA提供分配好(具体原因见第九章)

3.3 注意事项

(1)若创建非空的vector对象,则必须给出初始化的值

vector<int> ivec;    空的vector

cout << ivec[0]       运行报错(段错误),因为ivec未被初始化,不知道具体大小 (应为vector<int> ivec(3); )

vector <int> val;      cout << val << endl;   编译报错,未定义val的位置

(2)两个对象复制时,两个对象类型需一致

vector<int> ivec1;

vector<int> ivec2(ivec1);       正确

vector<string> ivec3(ivec1);   报错


4 操作

4.1 基本模板

v.empty()               如果v为空,则返回true,否则返回false

v.size()                   返回v中的元素个数

v.push_back(t)       在v的末尾增加一个值为t的元素

v[n]                        返回v中位置为n的元素

v1 = v2                  把v1的元素替换为v2中元素的副本

v1 == v2               如果v1与v2相等,则返回true

!=, <, <=, >, >=    保持这些操作符惯有的含义

4.2 注意事项

(1) 成员函数size返回的响应vector类定义size_type的值

使用size_type类型时,必须指出该类型在哪里定义的。vector类型总是包含vector的元素类型

vector<int>::size_type 正确

vector::size_type          错误

(2)循环增加函数直到循环结束(ctrl+d)

    string word;
    vector <string> str;
    while (cin >>  word)
    {
        str.push_back(word);
        cout << word << endl;
    }

[root@iZwz9a9kyixoqvys89ewj4Z vector]# ./a.out 
aaa bbb ccc
aaa
bbb
ccc

(3)下标操作

for(vector<int>::size_type ix=0; ix != ivec.size(); ++ix)

{

        ivec[ix] = 0;   

}

 ivec.size() 不应该像C或者JAVA编程在循环之外初始化,因为C++的vector是可变的 (size函数一般定义成内联函数-提供效率)

 C++习惯优先 !=而不是<进行循环条件的判断




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值