使用swap vs change指向vector

时间:2013-05-11 08:01:16

标签: c++ pointers vector swap

我有2个整数向量。偶尔,我想换掉两个(详情请见下面)。我正在考虑的两个选项是使用交换函数或交换指针。我看到交换在不变的时间运行,看起来更干净。

有关交换的更多细节:我有多个线程访问第一个向量。偶尔我想对矢量进行一些长时间运行的计算。我仍然想从其他线程收集数据,所以我将交换另一个线程,以便其他线程可以在此期间继续运行

2 个答案:

答案 0 :(得分:1)

你应该在算法库中使用std :: swap巫婆。

#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

答案 1 :(得分:0)

“我有两个整数向量。”

为什么呢?看起来你想要的是一个单个向量,多个线程可以访问(通过适当的同步)。

任何“长时间运行的功能”都应该在第一个矢量的副本上运行。 制作副本的代码(仅vec2 = vec1;)也应该同步。

swap可能不是你想要的,因为在交换之后,访问向量的线程会发现向量中的旧值消失了,他们看到的只是“第二个”向量中的值。除非第二个向量与第一个向量相同,否则这些不一样,这意味着它只是一个副本,这意味着你只是将一个向量与自身交换...