2013-05-11 16 views
3

我有2個向量的整數。偶爾,我想交換兩個(詳情爲什麼在下面)。我正在考慮的兩個選項是使用交換功能或交換指針。我發現交換時間不斷,似乎是更清潔的方法。使用交換vs改變指向矢量

有關交換的更多細節:我有多個線程訪問第一個向量。偶爾我想對矢量做一些長時間的運算。我仍然想從其他線程收集數據,所以我將交換不同的線程,以便其他線程可以在此期間繼續運行。

+0

只要認識到'vector'是一個複雜的對象,甚至是一個atomic swap(並且'swap'函數不是原子的)不足以實現多線程的同步。 – 2013-05-11 08:13:35

+0

我打算使用鎖來防止同步問題。看起來交換是在不變的時間運行,並想知道它是否足夠好使用 – jamesatha 2013-05-11 08:17:16

回答

1

您應該在算法庫中使用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

+0

這和法線向量::交換方法有什麼區別?他們都在恆定時間運行? – jamesatha 2013-05-13 08:10:06

0

「我有一個整數的2個載體。」

爲什麼?它看起來像你想要的是多個線程可以訪問的單個向量(通過適當的同步)。

任何「長時間運行的函數」都應該在第一個向量的副本上運行。 使副本(只是vec2 = vec1;)的代碼也應該同步。

swap可能不是你想要的,因爲在交換之後,訪問該向量的線程將發現向量中的舊值將消失,並且他們看到的所有值都是「第二」向量中的值。這些不一樣,除非第二個向量與第一個向量相同,這意味着它是一個副本,這意味着您只需將一個向量與自己交換即可...

+0

這些是快照。我知道交換矢量是很好的,因爲在很短的時間內所有元素都將被新數據取代 – jamesatha 2013-05-13 08:09:19