C++面试题:看代码找错—vector容器的使用
2013-11-03 20:28
253 查看
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 );”后
,被删除元素之后的内容会自动往前移,导致迭代漏项
原文:http://genwoxuevc.blog.51cto.com/1852984/504092
本题是C++的一个很基础的问题,看过一些相关书籍,有一定的编程经验,即使不是C/C++也可以解决此问题,此问题的第二个错误类似与C#中的foreach中修改内容。
考点:理解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 );”后
,被删除元素之后的内容会自动往前移,导致迭代漏项
原文:http://genwoxuevc.blog.51cto.com/1852984/504092
本题是C++的一个很基础的问题,看过一些相关书籍,有一定的编程经验,即使不是C/C++也可以解决此问题,此问题的第二个错误类似与C#中的foreach中修改内容。
相关文章推荐
- C++面试题:看代码找错—vector容器的使用
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++ STL入门教程(1)——vector(向量容器)的使用(附完整程序代码)
- C++ STL vector(向量容器)的使用(附完整程序代码)
- C++ STL入门教程(1) vector向量容器使用方法
- 【C++ vector】容器类的使用(存放视频帧,生成视频示例)
- C++中vector容器使用详细说明
- vector容器的使用(部分)示例(c++)
- C++中三种容器的使用:vector,list,deque
- C/C++中容器vector使用方法<第一弹>
- C++向量容器vector的使用
- C++ vector容器使用 排序
- C++ STL基本容器的使用(vector、list、deque、map、stack、queue)
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- C++中vector容器的使用方式和函数调用
- C++ STL vector(向量容器)的使用(附完整程序代码)
- C++ STL容器的使用方法(vector、queue、list、set、map)
- 【语言-C++】C++容器:list、vector、hash、map的区别及使用范围