3

我有 2 个整数向量。有时,我想交换两者(原因如下)。我正在考虑的两个选项是使用交换函数或交换指针。我看到交换以恒定的时间运行,并且似乎是更清洁的方法。

有关交换的更多详细信息:我有多个线程访问第一个向量。有时我想对向量进行一些长时间运行的计算。我仍然想从其他线程收集数据,所以我将换一个不同的线程,以便其他线程可以在这段时间内继续运行

4

2 回答 2

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

于 2013-05-11T09:12:25.713 回答
0

“我有 2 个整数向量。”

为什么?看起来您想要的是多个线程可以访问的单个向量(使用适当的同步)。

任何“长时间运行的函数”都应该只对第一个向量的副本进行操作。制作副本 ( just vec2 = vec1;) 的代码也应该同步。

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

于 2013-05-11T09:29:19.127 回答