Closed range3 closed 6 months ago
ありがとうございます。マージしました。 @range3 さんを編集チームに招待させていただきますね。後ほどGitHubから招待の通知が届くと思います。 編集チームに参加すれば、masterブランチに直接コミットできるようになります。 もしよろしければ、今後ともよろしくお願いします。
ありがとうございます。いつもcpprefjpをはじめc++コミュニティサイトにはお世話になっております。 今後もし貢献できることがあれば編集させていただきます。
forward_list::erase_afterの、"イテレート中に要素を削除する"サンプルコードについて、 条件一致した要素をerase_afterで削除した後、erase_afterの返り値をitに代入していますが、 この返り値は削除された要素の次の要素である"4"を指しているので、これをitに代入してしまうと、次のループで4のチェックが飛んでしまいます。(next == ls.end()) ここでは、erase_afterの返り値は単に無視すれば正しい動作になるかと思います。
テスト
わかり易さのために、
std::forward_list<int> ls = {3, 1, 1, 4};
に変更しています修正前
int main() { std::forward_list ls = {3, 1, 1, 4};
// イテレート中に要素削除をするような場合には、 // 範囲for文は使用できない for (auto it = ls.before_begin();;) { auto next = std::next(it); if (next == ls.end()) break;
}
for (const auto& x : ls) { std::cout << x << std::endl; } }
3 1 4