-
构成迭代器的范围有何限制
迭代器的范围未左闭右开的范围, 及
end()
指向是最后一个元素的后一个元素我们可以通过递增
begin()
来到达end()
, 若两个相等表示容器未空, 指向首元素, -
编写函数, 通过一组迭代器找到范围里面你的某个值, 如果没有找到处理返回值的情况, 如果找到了返回迭代器
#include <iostream>
#include <vector>
typedef std::vector<int> it_int;
it_int& Check(it_int& Begin,it_int& End,int date)
{
while(Begin != End)
{
if(*Begin == date) return Begin;
++Begin;
}
if(Begin == End) throw 1;
else throw 2;
}
int main()
{
std::vector<int> vec_int;
int temp = 0;
while(std::cin >> temp)
{
vec_int.push_back(temp);
}
it_int rbegin = vec_int.begin();
it_int rend = vec_int.end();
try{
it_int it_vec = Check(rbegin,rend,6);
}
catch(int exp)
{
switch (exp)
{
case 1:
std::cout <<"没有查找到数据"<<std::endl;
break;
case 2:
st::cout << "输入迭代器范围错误" <<std::endl;
break;
}
}
std::cout <<"已查找到数据返回值为迭代器的引用"<<std::endl;
return 0;
}
/*
本题错误点在上方第一次写成了返回局部迭代器, 没有加上迭代器的引用所以系统警告
因为要处理未找到给定值的情况, 那么可以用throw抛出异常, 在主程序里面检查异常的错误报告从而判断是那种错误
*/
-
下列程序的错误
list<int> list1; list<int>::iterator it_be = list1.begin(), it_end = list1.end(); while(it_end > it_begin)/*....*/ /* 上述的主要错误为list容器不支持大与小与号操作, 支持的只有string or vector or queue支持除了!=和==之外的关系运算 */
-
为了索引
int
的vector
中的元素应该使用什么类型使用
std::vector<int>::size_type vec_index
来用下标表示 -
为了读取
list<string>
中的元素应该用什么类型, 如果写入list
, 又该用什么类型使用
std::list<std::string>::const_iterator it_list;
进行读取使用
std::list<std::string>::iterator it_list2;
对容器内数据改变 -
编写一个程序将
list<const char*>
数据赋值到vector<string>
中#include <string> #include <vector> #include <list> #include <iostream> int main() { std::list<const char*> ls_ch(5,"hello"); std::vector<std::string> vec_str(ls_ch.begin(),ls_ch.end()); std::vector<std::string>::const_iterator it_vec = vec_str.begin(); while(it_vec != vec_str.end()) { std::cout<<*it_vec <<std::endl; ++it_vec; } return 0; }
-
编写程序判断
vector<int>
和list<int>
是否相等#include <iostream> #include <string> #include <list> int main() { std::vector<int> a(10,1); std::list<int> b(10,1); std::vector<int>::const_iterator it_vec = a.begin(); std::list<int>const_iterator it_ls = b.begin(); while(it_ls != b.end() && it_vec != a.end()) { static int i = 0; if(*it_vec == *it_ls) { ++i; std::cout << "第" << i << "个元素相等"<<std::endl; } ++it_vec,++it_ls; } return 0; }
-
假定两个容器, 下面比较有何限制
if(c1 < c2) //两个容器的类型一致, 如果两个是类类型, 那么此时类应该也包含了比较运算符