c++ primer plus 第16章string 类和标准模板库, 16.3.1模板类 vector

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
例如:第一章 Python 机器学习入门之pandas的使用


提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档


16.3.1模板类 vector

第4章简要地介绍了 vector 类,下面更详细地介绍它。在计算中,矢量(vector)对应数组,而不是第11章介绍的数学矢量(在数学中,可以使用N个分量来表示N维数学矢量,因此从这方面讲,数学矢量类似一个 N 维数组。然而,数学矢量还有一些计算机矢量不具备的其他特征,如内乘积和外乘积)。计算矢量存储了一组可随机访问的值,即可以使用索引来直接访问矢量的第10 个元素,而不必首先访问前面第9个元素。所以 vector 类提供了与第 14章介绍的 valaray 和 ArrayTP 以及第4章介绍的 array 类似的操作,即可以创建 vector 对象,将一个 vector 对象赋给另一个对象,使用[]运算符来访问 vector 元素。要使类成为通用的,应将它设计为模板类,STL正是这样做的–在头文件vector(以前为 vector.h)中定义了一个vector 模板。
要创建 vector 模板对象,可使用通常的表示法来指出要使用的类型。另外,vector 模板使用动态内存分配,因此可以用初始化参数来指出需要多少矢量:

#include vector
using namespace std;
vector<int>ratings(5);//a vector of 5 ints
int n;
cin >>n;
vector<double>scores(n);// a vector of n doubles


由于运算符门被重载,因此创建 vector 对象后,可以使用通常的数组表示法来访问各个元素

ratings[0]= 9;
for(int i=0ii < n; i++)
	cout <<scoreslil<< endl;

分配器
与 string 类相似,各种 STL容器模板都接受一个可选的模板参数,该参数指定使用哪个分配器对象来管理内存。例如,vector模板的开头与下面类似:

template <class T,class Allocator = allocator<T>>
class vector{...

如果省略该模板参数的值,则容器模板将默认使用 allocator类。这个类使用new和 delete。
程序清单16.7是一个要求不高的应用程序,它使用了这个类。该程序创建了两个 vector 对象–一个是int规范,另一个是string规范,它们都包含5个元素。

程序清单 16.7 vect1.cpp

// vect1.cpp -- introducing the vector template
#include <iostream>
#include <string>
#include <vector>

const int NUM = 5;
int main()
{
    using std::vector;
    using std::string;
    using std::cin;
    using std::cout;
    using std::endl;

    vector<int> ratings(NUM);
    vector<string> titles(NUM);
    cout << "You will do exactly as told. You will enter\n"
         << NUM << " book titles and your ratings (0-10).\n";
    int i;
    for (i = 0; i < NUM; i++)
    {
        cout << "Enter title #" << i + 1 << ": ";
        getline(cin,titles[i]);
        cout << "Enter your rating (0-10): ";
        cin >> ratings[i];
        cin.get();
    }
    cout << "Thank you. You entered the following:\n"
          << "Rating\tBook\n";
    for (i = 0; i < NUM; i++)
    {
        cout << ratings[i] << "\t" << titles[i] << endl;
    }
    // cin.get();

    return 0; 
}

该程序使用 vector 模板只是为方便创建动态分配的数组。下一节将介绍一个使用更多类方法的例子。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值