编写一个函数来打印长度为3的所有字符串 解决方案必须使用带迭代器的for循环 void print3(const set& str)
这是我的代码:
void print3(const set<string>& str){
string st;
set<string,less<string>>::iterator iter;
for(iter=str.begin();iter!=str.end();++iter)
{st=*iter;
if(st.length()==3) cout<<st<<' ';
}
}
但我觉得这不好。有人有更好的代码吗?请帮助我改进它。
- 我有关于迭代器的另一个问题
string name[]={"halohg","nui","ght","jiunji"};
set<string> nameSet(name,name+4);
set<string>::iterator iter;
iter=name.begin();
如何使用迭代器访问name [2] =“ght”?
我试过iter+2
,但它有一些问题。我想我必须使用随机访问迭代器,但我不知道如何使用它。
请帮我。非常感谢!
答案 0 :(得分:0)
关于改进的一些想法:
string st;
,只需查看if (iter->length() == 3)
。const_iterator
代替iterator
,因为您没有修改任何项目。less<string>
作为模板参数是没用的,因为那是default compare functor anyway,因此可以将其删除。iter
中声明你的for
1}}。所以它变成了:
for (set<string>::const_iterator iter = str.begin(); iter != str.end(); ++iter) {
if (iter->length() == 3) cout << *iter << ' ';
}
根据您的要求,这就像您能得到的一样好。
至于你的第二个问题,set
的迭代器不是随机访问迭代器。这是一个(常数)Bidirectional Iterator。如果您愿意,可以使用std::advance,然后执行:
std::set<std::string>::iterator iter;
iter = name.begin();
std::advance(iter, 2);
// iter is now pointing to the second element
请记住set
对其元素进行排序。