如何使用提示重复插入()到std :: set?

时间:2015-01-03 23:59:19

标签: c++ c++11 porting c++98 stdset

According to cplusplus.comstd::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()更改了但没有返回值?

0 个答案:

没有答案