我有2個向量的整數。偶爾,我想交換兩個(詳情爲什麼在下面)。我正在考慮的兩個選項是使用交換功能或交換指針。我發現交換時間不斷,似乎是更清潔的方法。使用交換vs改變指向矢量
有關交換的更多細節:我有多個線程訪問第一個向量。偶爾我想對矢量做一些長時間的運算。我仍然想從其他線程收集數據,所以我將交換不同的線程,以便其他線程可以在此期間繼續運行。
我有2個向量的整數。偶爾,我想交換兩個(詳情爲什麼在下面)。我正在考慮的兩個選項是使用交換功能或交換指針。我發現交換時間不斷,似乎是更清潔的方法。使用交換vs改變指向矢量
有關交換的更多細節:我有多個線程訪問第一個向量。偶爾我想對矢量做一些長時間的運算。我仍然想從其他線程收集數據,所以我將交換不同的線程,以便其他線程可以在此期間繼續運行。
您應該在算法庫中使用std :: swap witch。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
vector<int> a;
a.push_back(10);
vector<int> b;
b.push_back(9);
std::swap(a,b);
std::cout<< a[0];
return 0;
}
所以你看到它交換a和b
這和法線向量::交換方法有什麼區別?他們都在恆定時間運行? – jamesatha 2013-05-13 08:10:06
「我有一個整數的2個載體。」
爲什麼?它看起來像你想要的是多個線程可以訪問的單個向量(通過適當的同步)。
任何「長時間運行的函數」都應該在第一個向量的副本上運行。 使副本(只是vec2 = vec1;
)的代碼也應該同步。
swap
可能不是你想要的,因爲在交換之後,訪問該向量的線程將發現向量中的舊值將消失,並且他們看到的所有值都是「第二」向量中的值。這些不一樣,除非第二個向量與第一個向量相同,這意味着它是一個副本,這意味着您只需將一個向量與自己交換即可...
這些是快照。我知道交換矢量是很好的,因爲在很短的時間內所有元素都將被新數據取代 – jamesatha 2013-05-13 08:09:19
只要認識到'vector'是一個複雜的對象,甚至是一個atomic swap(並且'swap'函數不是原子的)不足以實現多線程的同步。 – 2013-05-11 08:13:35
我打算使用鎖來防止同步問題。看起來交換是在不變的時間運行,並想知道它是否足夠好使用 – jamesatha 2013-05-11 08:17:16