您的位置:首页 > 编程语言 > C语言/C++

C++面试题:看代码找错—vector容器的使用

2011-03-02 08:22 387 查看
C++面试题:看代码找错—vector容器的使用

考点:理解vector容器的使用

出现频率:★★★★

typedef vector IntArray;

IntArray array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 2 );

array.push_back( 3 );

//删除array数组中所有的2

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

{

if( 2 == *itor )

array.erase( itor );

}

解析:

这道题有两个错误。

(1)代码1行中没有使用类型参数,这将会导致编译错误。由于array需要添加int类型的元素,因此代码

1行定义vector时应该加上int类型。

typedef vector<int> IntArray;

(2)代码8~12行的for循环,这里只能删除array数组中的第一个2,而不能删除所有的2。这是因为,每

次调用“array.erase( itor );”后,被删除元素之后的内容会自动往前移,导致迭代漏项,应在删除一

项后使itor--,使之从已经前移的下一个元素起继续遍历。

正确的程序如下:

#include <iostream>

#include <vector>

using namespace std;

int main()

{

typedef vector<int> IntArray;

IntArray array;

array.push_back( 1 );

array.push_back( 2 );

array.push_back( 2 );

array.push_back( 3 );

//删除array数组中所有的2

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

{

if( 2 == *itor )

{

array.erase( itor );

--itor; //删除一项后使itor--

}

}

//测试删除后array中的内容

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

{

cout << *itor << endl;

}

}

执行结果为:

1

3

答案:

(1)没有使用类型参数,会导致编译错误。

(2)只能删除array数组中的第一个2,而不能删除所有的2。因为每次调用“array.erase( itor );”后

,被删除元素之后的内容会自动往前移,导致迭代漏项

更多C/C++面试题、C/C++视频、C/C++电子书,

请百度参考"51CTO提醒您,请勿滥发广告!"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: