gcc中 std::list 的坑

std::list
std::advance

使用时的坑:

std::list listObj {1, 2, 3, 4, 5};
auto itEnd = listObj.end();
itEnd++;
assert(itEnd == listObj.begin());  // Ok
assert(itEnd == listObj.end());    // crash

上面代码中,itEnd在被赋予listObj.end()后仍然可以自增,移动为listObj.begin(),因此std::advance的距离参数若大于listObj.size(),则advance会从头开始再次移动,而不是抛出异常或固定为listObj.end()

你可能感兴趣的:(gcc中 std::list 的坑)