关于C++的vector用法的总结

标准库类型的vector表示对象的集合,其中所有的对象都有相同的类型;集合中每一个对象都有一个与其对应的索引,索引用于访问对象。使用时必须包含:

#include<vector>
using std::vector;

1、定义和初始化vector对象

vector<string> svec;//默认初始化,svec不包含任何元素
//事实上,最常见的方式是先定义一个空的vector,
//然后当运行时获取到元素值就添加进去;

vector<int> ivec;
//往ivec中添加一些值
vector<int> ivec1(ivec);
vector<int> ivec2=ivec;

列表初始化

vector<string> svec={"the","Three","Kingdoms"};//使用'='进行列表初始化
//也可以将初始值都放在花括号里进行列表初始化
vector<string> v{"Be","a","Better","Fighter"};

创建制定数量的元素

vector<int> ivec(10,-1);//10和int元素,每个都初始化为-1
vector<int> ivec1(10);//10个int元素,每个初始化为0
vector<string> svec(10,"hello");//10个string元素,每个都初始化为"hello"
vector<string> svec1(10);//10个string元素,每个都为空string对象

2、向vector中添加元素
push_back负责把一个值当成vector对象的尾元素“push”到vector对象的”尾端back”

vector<double> dvec;
double temp;
for(int i=0;i<100;i++)
{
   temp=i*i;
   dvec.push_back(temp);
}

从标准输入中读取单词,存入vector中

string word;
vector<string> text;
while(cin>>word)
{
   text,push_back(word);
}

3、vector的其他操作

  • v.empty();//检查是否为空
  • v.size();//返回v中元素的个数
  • v[n];//获取v中第n个元素

使用引用改变vector中的元素

vector<int> v{1,2,3,4,5,6,7,8,9};
for(auto &i:v)
{
   i*=100;
   cout<<i<<endl;
}

例子:以10分为一个分数段统计成绩的数量:0~9,10~19,20~29,……

vector<int> scores(11,0);//11个分数段,全都初始化为0
unsigned int grade;
while(cin>>grade)//读取成绩
{
   if(grade<=100)//只处理有效的成绩
       ++scores[grade/10];//将对应分数段的计数值加1
}

特别注意:对于一个空的vector,不能使用下标向其中添加元素。只能使用push_back. 只能对确知已存在的元素执行下标操作。

4、使用迭代器
begin成员负责返回指向第一个元素(或第一个字符)的迭代器;end成员负责返回指向容器(或string对象)的尾元素的下一个位置的迭代器。
begin和end返回的具体类型由对象是否是常量决定,如果对象是常量,begin和end返回const_iterator;如果对象不是常量,返回iterator;

vector<int>::iterator it;//it是能读写的vector<int>的元素
string::iterator it1;//it1是能读写的string对象中的字符
vector<int>::const_iterator it2;//it2只能读元素,不能写元素
string::const_iterator it3;//it3只能读字符,不能写字符

例子,使用迭代器依次输出text的每一行知道遇到第一个空白行为止:

for(auto it=text.cbegin();it!=text.cend()&&!it->empty();++it)
{
   cout<<*it<<endl;
}

cbegin()等价于const_begin();cend()等价于const_end()

猜你喜欢

转载自blog.csdn.net/shuoyueqishilove/article/details/80431927