2013-05-11 1 views
3

У меня есть 2 вектора целых чисел. Иногда я хотел бы обменять два (подробности для чего ниже). Два варианта, которые я рассматриваю, - это использование функции свопинга или замена указателей. Я вижу, что своп работает в постоянное время и кажется более чистым.Использование swap против смены указателей на векторы

Подробнее об обмене: у меня есть несколько потоков, обращающихся к первому вектору. Иногда я хочу сделать несколько длинных вычислений на векторе. Я все еще хочу собирать данные из других потоков, поэтому я буду меняться в другом, чтобы другие потоки продолжали работать в течение этого времени.

+0

Просто осознайте, что «вектор» представляет собой сложный объект и даже атомный swap (и функция 'swap' не является атомарной) не является достаточной синхронизацией, чтобы сделать ее пригодной для использования несколькими потоками. –

+0

Я планирую использовать блокировку для защиты от проблем синхронизации. Похоже, что swap запускается в постоянное время и хочет знать, достаточно ли было бы использовать – jamesatha

ответ

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; 
} 

так что вы видите его поменять а и б

+0

. В чем разница между этим и обычным методом vector :: swap? Они оба работают в постоянное время? – jamesatha

0

«У меня есть 2 векторов целых чисел.»

Почему? Похоже, что вы хотите - это единственный вектор, к которому могут обращаться несколько потоков (с соответствующей синхронизацией).

Любая «длинная работа» должна работать только с копией первого вектора. Код, который делает копию (только vec2 = vec1;), также должен быть синхронизирован.

swap может быть не таким, какой вы хотите, поскольку после замены потоки, которые обращаются к вектору, обнаруживают, что старые значения в векторе ушли, и все, что они видят, являются значениями из «второго» вектора. Это не то же самое, если второй вектор не совпадает с первым, то есть это копия, означающая, что вы просто поменяли вектор с собой ...

+0

Это мгновенные снимки. Я знаю, что замена векторов прекрасна, поскольку все элементы будут заменены новыми данными за очень короткий промежуток времени – jamesatha

 Смежные вопросы

  • Нет связанных вопросов^_^