C++标准库vector类型 详细介绍 及示例程序

C++标准库vector类型

1. vector对象可以在运行时高效的添加元素,以下是几种用来定义和初始化vector对象的方法:
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个副本。


2. vector对象的操作:
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;
!=, <, <=, >, >=,   保持操作符惯有含义。

成员函数size返回的是相应vector类定义的size_type的值。
使用size_type时,必须指出该类型是在哪里定义的,vector类型总是包括vector的元素类型:
vector<int>::size_type //正确
vector::size_type   //错误

向vector添加元素,v.push_back接受一个元素值,将它作为一个新的元素添加到vector对象后
边:
string word;
vector<string> text; //定义一个空的vector类对象
while(cin>>word) {
text.push_back(word); //将输入的字符插到text对象后面,即实现了对空的
     //vector的初始化,每一次循环就添加一个新的vector对象
}

vector对象的下标操作:
由于vector对象没有命名,通常使用下标操作符来获取元素:
以下程序将vector中每个元素值重置为0:
for(vector(int)::size_type ix = 0 ; ix!=ivec.size(); ++ix)
ivec[ix]=0;

下标操作不能添加新元素,只能获取已有的元素,下面的程序试图初始化空的vector对象ivec为0-9,
但不会成功:
vector<int> ivec;   //定义空的vector对象ivec
for(vector<int>::size_type ix=0; ix!=10; ++ix)
ivec[ix]=ix; //错误!因为ivec没有元素,初始化失败!
正确写法:
for(vector<int>::size_type ix=0; ix!=10; ++ix)
ivec.push_back(ix);   //合法,添加新元素且用ix对其进行初始化
提示:
要对vector中的元素进行输出操作,必须保证元素确实存在,常见的错误有:
1】试图输出空的vector对象中的“元素”: vector<int> ivec; cout<<ivec[0];
2】下标溢出: vector<int> ivec2(10); cout<<ivec2[10];(十个元素,下标范围0—9)。

以下程序读取一组整数到vector对象,并计算相邻两个元素的和:
#include<vector>
#include<iostream>
using std::vector ;
using std::cout ;
using std::cin ;
using std::endl;
int main()
{
int ival;
vector<int> ivec;
cout<<"请输入若干整数,用空格分隔开,输入ctrl+z,按enter结束输入:"<<endl;
while(cin>>ival)
   ivec.push_back (ival);
if(ivec.size() == 0) {
   cout<<"NO ELEMENT? "<<endl;
   return -1;
}
cout<<"相邻元素求和的结果是:"<<endl;
for (vector<int>::size_type ix=0;ix<ivec.size ()-1;ix=ix+2)
{cout<<ivec[ix]+ivec[ix+1]<<"/t";
if((ix+1)%6 == 0)
cout<<endl;
}
if(ivec.size() % 2 !=0)
   cout<<endl
   <<"由于你输入了 "<<ivec.size()<<"(奇数)个元素,最后一个元素"<<ivec[ivec.size()-1]<<"没有参与求和!"<<endl;
return 0;
}

作简单修改,将一个数列首尾项相加:
#include<vector>
#include<iostream>
using std::vector ;
using std::cout ;
using std::cin ;
using std::endl;
int main()
{
int ival;
vector<int> ivec;
cout<<"请输入若干整数,用空格分隔开,输入ctrl+z,按enter结束输入:"<<endl;
while(cin>>ival)
   ivec.push_back (ival);
if(ivec.size() == 0) {
   cout<<"NO ELEMENT? "<<endl;
   return -1;
}
cout<<"首尾元素求和的结果是:"<<endl;
vector<int>::size_type cnt=0; vector<int>::size_type first; vector<int>::size_type last;
for(first=0, last=ivec.size() - 1;
   first<last; ++first, --last)
{cout<<ivec[first] + ivec[last]<<"/t";
++cnt;
if((cnt+1)%6 == 0)
cout<<endl;
}
if(first=last)
   cout<<endl
   <<"由于你输入了 "<<ivec.size()<<"(奇数)个元素,中间一个元素"
   <<ivec[first]<<"没有参与求和!"<<endl;
return 0;
}

以下程序实现小写字母向大写字母的转换:
#include<vector>
#include<iostream>
#include<string>
#include<cctype>
using std::vector ;
using std::cout ;
using std::cin ;
using std::endl;
using std::string ;
int main()
{
string str;
vector<string> svec;
cout<<"请输入一条字符串,将把字符串中的小写字母转换成大写字母:"<<endl;
while(cin>>str)
   svec.push_back (str);
if(svec.size() ==0){
   cout<<"你没有输入任何字符!"
    <<endl;
   return -1;
}
for(vector<string>::size_type ix=0; ix!=svec.size(); ++ix){
   for(string::size_type index=0; index != svec[ix].size(); ++index)
    if(islower(svec[ix][index]))
     svec[ix][index]=toupper(svec[ix][index]);
   cout<<svec[ix] << " ";
   if((ix+1)%8 ==0)
    cout<<endl;
}
return 0;
}

将一个vector赋给另一个vector:
#include<iostream>
#include<vector>
using std::cout ;
using std::cin ;
using std::endl ;
using std::vector ;
int main()
{
vector <int> ivec1;
vector <int> ivec2;
int a;
while (cin>>a)
   ivec1.push_back(a);
for (vector<int>::iterator iter = ivec1.begin() ; iter != ivec1.end() ; ++iter)
{
   ivec2.push_back(*iter);
}
for (vector<int>::size_type ix=0; ix!=ivec2.size(); ++ix)
{cout<<ivec2[ix];}
cout<<endl;
return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值