Vector 例题

例题一:

下面这个代码输出的是( )

#include <iostream>

#include <vector>

using namespace std;

int main(void)

{

vector<int>array;

array.push_back(100);

array.push_back(300);

array.push_back(300);

array.push_back(300);

array.push_back(300);

array.push_back(500);

vector<int>::iterator itor;

for(itor=array.begin();itor!=array.end();itor++)

{

        if(* itor==300)

        {

                itor=array.erase(itor);

        }

}

for(itor=array.begin();itor!=array.end();itor++)

{

        cout<<*itor<<" ";

}

        return 0;

}

例题二

std::vector::iterator 没有重载下面哪个运算符( )

        A.==

        B.++

        C.*

        D.>>

例题三

T是一个数据类型,在vs系列编译器中,debug模式下,关于std::vector::at 和 std::vector::operator[] 描述正确的是( )

        A.at总是做边界检查, operator[] 不做边界检查.

        B.at 不做边界检查, operator[] 做边界检查.

        C.at和operator[] 都是会做边界检查的

        D.以上都不对

例题四

下面程序的输出结果是

int main()

{

int ar[] = {1,2,3,4,5,6,7,8,9,10};

int n = sizeof(ar) / sizeof(int);

vector<int> v(ar, ar+n); //开了多大?

cout<<v.size()<<":"<<v.capacity()<<endl;

v.reserve(100);

v.resize(20);

cout<<v.size()<<":"<<v.capacity()<<endl;

v.reserve(50);

v.resize(5);

cout<<v.size()<<":"<<v.capacity()<<endl;

}

1. 

分析:程序首先把100 300 300 300 300 500进行尾插

  for(itor=array.begin();itor!=array.end();itor++)

{

        if(* itor==300) //向量的数据为300时进行删除

{

//删除之后迭代器进行返回赋值,不会导致迭代器失效,删除当前数据,

//后面的数据相当于会向前移动,此时itor还是指向下一个300数据,

//但是由于循环回去,for循环末尾itor++会让迭代器指向下一个

      //数据,因此会错失一次300的比较判断

        itor=array.erase(itor);

}

}

所以答案为: 100 300 300 500 C答案

2. 

分析:vector底层是以当前类型的指针作为迭代器,对于指针而言,能够进行操作的方法都支持,如==,++,*,而>>运算符并没有重载

故答案为D

3. 

注意题目专门强调了vs系列编译器,debug模式下

at() 和 operator[] 都是根据下标获取任意位置元素的,在debug模式下两者都会去做边界检查。

当发生越界行为时,at 是抛异常,operator[] 内部的assert会触发

故选择C

4. 

分析:vector<int> v(ar, ar+n);

        cout<<v.size()<<":"<<v.capacity()<<endl; //大小为数组元素个数,因此size=10 capacity=10

v.reserve(100); //预留空间100

v.resize(20);  //调整元素为20个,此时元素的size会改变,由于个数小于容量,因此容量不会变小

cout<<v.size()<<":"<<v.capacity()<<endl;// 故size=20 capacity=100

v.reserve(50);//期望预留空间为50,可是现在的空间已经有100个,所以空间不会减小

v.resize(5); //元素个数调整为5,g++与vs都会缩size,而capacity g++缩,VS不缩

cout<<v.size()<<":"<<v.capacity()<<endl;// 故size=5 capacity=100

所以答案为:C

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一码归—码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值