我有一个元素映射和一个嵌套循环来迭代它.但我希望迭代器的行为类似于:
map<int,int>::iterator it;
map<int,int>::iterator it1;
bool flag=false;
for(it=m.begin();it!= m.end()-1;it++)
{
for(it1 = it+1;it1 != m.end();it1++)
{
if((it->first < it1->first)&&(it->second > it1->second))
{
flag=true;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
基本上,外部循环应该从最后但一个位置开始终止,内部循环必须从外部循环迭代器开始迭代.但是这段代码似乎不起作用.(其中+不匹配+ 1)未定义任何帮助将非常感激.(请指出任何重复的链接,因为我找不到一张地图.)谢谢!
的std::map<K,V,C,A>::iterator是一个双向迭代,这意味着它不提供operator+既不operator-(仅operator++和operator--在前缀和postifx形式).
在C++ 11中,仍然可以使用std::next()或移动迭代器std::prev():
for (it = m.begin(); it != std::prev(m.end()); ++it)
// ~~~~~~~~^ instead of m.end()-1
{
for (it1 = std::next(it); it1 != m.end(); ++it1)
// ~~~~~~~~^ to get the it+1
Run Code Online (Sandbox Code Playgroud)
在C++ 03中,您可以使用std::advance()相反的方式向前/向后移动给定的间隔(不同之处在于它在实际对象上操作而不是创建类似的副本std::next):
it1 = it;
for (std::advance(it1, 1); it1 != m.end(); ++it1)
// ~~~~~~^ ^ number of steps
Run Code Online (Sandbox Code Playgroud)
两种方法都提供了增加/减少给定迭代器的最佳方法(基于迭代器的特征).
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |