如果映射中只有單個元素,std :: map迭代器遞減應該返回什麼?這裏的示例代碼std :: map :: iterator單個元素遞減
#include <map>
#include <stdio.h>
int main()
{
std::map<int, int> m;
m.insert(std::make_pair(1, 1));
//std::map<int, int>::iterator it = m.begin();
std::map<int, int>::iterator it = m.upper_bound(0);
printf("isbegin: %d\n", it == m.begin());
--it;
bool isend = it == m.end();
printf("isend: %d\n", isend);
}
在Windows上,將打印isend:1,在Linux上使用g ++ 4.6將isend打印:0
問題:是上面UB的真正情況下減量?如果不是,那麼結果是正確的 - Windows還是Linux?
UPDATE:修改後的代碼表明UPPER_BOUND被稱爲
請參閱http://stackoverflow.com/questions/8533875/substraction-or-decrement-random-access-iterator-pointing-to-begin – Nick 2013-05-02 09:51:26
那麼,在真正的應用程序中,迭代器從upper_bound()返回,那麼相關Q仍然適用? – queen3 2013-05-02 09:53:32