如何合并两个向量

How can I merge two vectors?

本文关键字:向量 两个 合并 何合并      更新时间:2023-10-16

我正在开发一个应用程序,我想提高效率。 在一个重要的部分中,我有 2 个大向量(大小相同),我将一个合并到另一个中。 我想做的是:

std::vector<int> first (4,2); //A vector containing 4 ints with value 2
std::vector<int> second (4,3);  //A vector with 4 ints with value 3
for(int i = first.size()-1; i > 0; --i){
  first[i] += second[i];
}

如何提高工作效率? 提前感谢!

为了有效地合并多个向量,您应该使用 SIMD(如果您的硬件支持的话)。有几种方法可以做到这一点:

  • 使用内联组装;
  • 使用内联函数;
  • 使用特殊类,这些类可能使用 SIMD,如 C++11 std::valarray 中提供的那样;
  • 使用编译器指定的选项和指令;
  • 别的。

例如,您可以使用多线程。但是你的数组应该非常大才能获得利润 - 从大约 1,000,000 个元素开始

您可能会更快地找到此方法:

int main()
{
    int first = {5, 10, 15, 20, 25};
    int second = {50, 40, 30, 20, 10};
    int* f = first;
    int* e = first + (sizeof(first)/sizeof(int));
    int* s = second;
    while(f != e)
        *f++ += *s++;
    for(std::size_t i = 0; i < sizeof(first)/sizeof(int); ++i)
        std::cout << " " << first[i];
}

试试这个:

int main()
{
    int first[] = {5,10,15,20,25};
    int second[] = {50,40,30,20,10};
    int len=first.size();
    for(int i = 0; i < second.size(); i++,len++)
    {
        first[len]= second[i];
    }
}