2

cplusplus.comによるとstd::set::insert()、項目を挿入する場所のヒント イテレータを取るオーバーロードが C++98 から C++11 に変更されました。C++98 では、ヒントは次のようになります。

position が挿入された要素の前にある要素を指している場合、関数は挿入時間を最適化します。

ただし、C++11 ではヒントが変更され、次のようになります。

position が挿入された要素に続く要素 (または最後の要素の場合は最後) を指している場合、関数は挿入時間を最適化します。

ただし、C++98 でも C++11 でも、戻り値は同じです。

新しく挿入された要素、またはセット内に既に同じ値を持つ要素のいずれかを指す反復子。

C++98 の場合、次のように一連の隣接する項目を挿入するコードがあります。

void example98(std::set &_sent, int beginOffset, int lastOffset) {
  std::set<int>::iterator itr = _sent.end();

  for (int offset = beginOffset; offset <= lastOffset; ++offset) {
    itr = _sent.insert(itr, offset);
  }
}

これを C++11 で次のように変更できます。

void example11(std::set &_sent, int beginOffset, int lastOffset) {
  std::set<int>::iterator itr = _sent.end();

  for (int offset = lastOffset; offset >= beginOffset; --offset) {
    itr = _sent.insert(itr, offset);
  }
}

しかし、C++98 から C++11 に移行するためにコードをリファクタリングする必要があることに悩まされています。ここで何か間違ったことをしているのですか、そうでない場合、この変更の動機は何だったのでしょうかinsert()。戻り値ではありませんか?

4

0 に答える 0