使用時(shí)的坑:
std::list<int> listObj {1, 2, 3, 4, 5};
auto itEnd = listObj.end();
itEnd++;
assert(itEnd == listObj.begin()); // Ok
assert(itEnd == listObj.end()); // crash
上面代碼中,itEnd在被賦予listObj.end()后仍然可以自增,移動(dòng)為listObj.begin(),因此std::advance的距離參數(shù)若大于listObj.size(),則advance會(huì)從頭開始再次移動(dòng),而不是拋出異常或固定為listObj.end()