2

由于 concurrent_vector 不使用连续的内存块,我只想确定这是否可以:

concurrency::concurrent_vector<Something> my_array;

//Populate 'm_array' somehow perhaps involving multiple threads

const auto iter  = std::find_if (my_array.begin (), m_array.end (), SomeLambda);
const int  index = iter - my_array.begin ();

我的问题:在任何情况下,'index' 不会索引我刚刚找到的元素(通过 concurrect_vector::operator[] 方法)?我意识到另一个线程理论上可以修改元素 - 这不是我的问题。

我想这应该可行,但是因为我习惯于使用原始指针,所以我想问一下(这样我就不会无意中添加细微错误的来源)。

4

2 回答 2

3

它是安全的,但为什么不使用std::distance呢?

  • 它更地道。
  • 如果您更改容器,它将起作用。
  • 它同样有效。
于 2013-05-01T11:24:37.353 回答
3

concurrent_vector::iterator是一个随机访问迭代器,因此支持并有效地获取差异(尽管您不应该使用 anint来存储结果)。

当然,正如您所注意到的,这不是线程安全的。

于 2013-05-01T11:20:28.343 回答