接上一篇,在这一篇中详细介绍一下C++标准库的vector类型。
一 标准库vector类型
vector是同一种类型对象的集合,每个对象都有一个对应的整数索引值。和string对象一样,标准库将负责管理与存储字符相关的内存。将vector称之为容器是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。
在使用vector之前,必须包含相应的头文件。
#include<vector>
using std::vector;
vector是一个类模板(class template),类模板的定义将在后续博文中再做介绍。使用模板可以编写一个类定义或函数定义,而用于多个不同的数据类型。因此,我们可以定义保存string对象的vector,或保存int值的vector,又或是保存自定义的类类型对象的vector。
声明从类模板产生的某种类型对象,需要提供附加信息,信息的种类取决于模板,以vector为例,必须说明vector保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来制定类型:
vector<int> ivec;//ivec holds objects of int
vector<Sales_item> Sales_vec;//Sales_vec holds Sales_item和其他变量的定义一样,定义vector对象要制定类型和一个变量的列表。
第一个定义:类型是 vector<int> ,该类型即是含有若干 int 类型对象的 vector,变量名为ievc
第二个定义:变量名是Sales_vec ,它所保存的元素是 Sales_item类型的对象,Sales_item 可以是结构体或其他的数据类型。
vector对象的操作
v.empty() 如果v为空,则返回true,否则 返回false
v.size() 返回v中元素的个数
v[n] 返回v中位置为n的元素,位置从0开始计数
v1 == v2 把v1的元素替换为v2中元素的副本
v1 = = v2 比较v1和v2是否相等
!=,<,<=,>,>= 保持这些操作符惯有的含义
实例:
// vectortest.cpp : 定义控制台应用程序的入口点
#include "stdafx.h"
#include <Windows.h>
#include <iostream>
using namespace std;
#include <string>
using std::string;
#include<vector>
using std::vector;
struct A{
A(){
clear();
}
int a;
double b;
char c;
void clear()
{
a=0;
b=0.01;
c=' ';
}
};
int _tmain(int argc, _TCHAR* argv[])
{
vector<A> vecA(3);//创建了3个空对象
cout<<"1:"<<vecA.size()<<endl;
A a;
a.a=1;
a.b=2.222;
a.c='a';
vecA.push_back(a);//向vector中添加元素
cout<<"2:"<<vecA.size()<<endl;
vector<int> ivec1;
for (vector<int>::size_type ix=0;ix<5;++ix)
{
ivec1.push_back(ix);
}
vector<int> ivec2(ivec1);
vector<int> ivec3(10,-1);//10个元素,每一个初始化为-1
for (vector<int>::size_type ix=0;ix<ivec3.size();++ix)
{
//警告:仅能对确知已存在的元素进行下标操作
ivec3[ix]=ix;
}
vector<string> ivec4(4,"Hi");//3个元素,每一个初始化为 Hi
system("pause");
return 0;
}
运行结果: