如何使用C++ STL合并两个数组?

如何使用C++ STL合并两个数组?

C++中,STL(标准模板库)是一个非常有用的工具,几乎可以实现任何算法和数据结构。合并两个数组是我们在开发中经常遇到的问题,STL提供了多种方法解决这个问题。

在本文中,我们将介绍几种使用STL合并两个数组的方法,这些方法易于阅读,易于理解,而且非常实用。在此之前,请确保您已经掌握了C++ STL的基本概念。

方法一:使用std::merge()

std::merge是STL中一个非常有用的函数,它可以将两个已排序的区间合并为一个排序区间。对于这个问题,我们先将两个数组排序,然后使用std::merge合并它们。

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
  std::vector<int> v1 = {1, 3, 5, 7};
  std::vector<int> v2 = {2, 4, 6, 8};

  std::vector<int> result(v1.size() + v2.size());

  std::merge(v1.begin(), v1.end(), v2.begin(), v2.end(), result.begin());

  for (int num : result) {
    std::cout << num << " ";
  }
  std::cout << std::endl;
}

在上面的代码中,我们首先创建两个已排序的std::vector,然后创建一个存储结果的std::vector,大小为两个输入数组的总大小。

然后,我们调用std::merge,并将v1v2的开始和结束迭代器传递给它,以及结果数组的开始迭代器。最后,我们打印结果。

输出结果:

1 2 3 4 5 6 7 8

方法二:使用std::inplace_merge()

std::inplace_merge是另一个函数,它可以用来合并两个已排序的区间。不同之处在于,std::inplace_merge会将结果直接合并到一个输入序列中。

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
  std::vector<int> v1 = {1, 3, 5, 7};
  std::vector<int> v2 = {2, 4, 6, 8};

  // 将v2合并到v1中
  v1.insert(v1.end(), v2.begin(), v2.end());
  std::inplace_merge(v1.begin(), v1.begin() + 4, v1.end());

  for (int num : v1) {
    std::cout << num << " ";
  }
  std::cout << std::endl;
}

在这里,我们首先将v2附加到v1的末尾,然后调用std::inplace_merge,并将结果合并到v1中。

请注意,我们将第二个参数传递给v1.begin() + 4,以便将v2合并到v1中间。输出结果如下:

1 2 3 4 5 6 7 8

方法三:使用std::copy()

std::copy是另一个STL函数,可以将一个区间中的元素复制到另一个区间中,以及容器之间。

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
  std::vector<int> v1 = {1, 3, 5, 7};
  std::vector<int> v2 = {2, 4, 6, 8};
  std::vector<int> result(v1.size() + v2.size());

  std::copy(v1.begin(), v1.end(), result.begin());
  std::copy(v2.begin(), v2.end(), result.begin() + v1.size());

  for (int num : result) {
    std::cout << num << " ";
 }
  std::cout << std::endl;
}

在这里,我们首先创建一个大小为两个输入数组大小之和的结果数组。随后,我们分别调用std::copy函数将v1v2的元素复制到结果数组的开头和第二部分。最后,我们打印结果。

输出结果:

1 3 5 7 2 4 6 8

方法四:使用std::transform()

std::transform是STL中的一个函数,它可以将一个序列中的每个元素映射到一个新的序列中。这个函数的一个应用是合并两个序列。

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
  std::vector<int> v1 = {1, 3, 5, 7};
  std::vector<int> v2 = {2, 4, 6, 8};
  std::vector<int> result(v1.size() + v2.size());

  std::transform(v1.begin(), v1.end(), result.begin(), [](int x){return x;});
  std::transform(v2.begin(), v2.end(), result.begin() + v1.size(), [](int x){return x;});

  std::sort(result.begin(), result.end());

  for (int num : result) {
    std::cout << num << " ";
  }
  std::cout << std::endl;
}

在这里,我们首先创建一个大小为两个输入数组大小之和的结果数组。然后,我们使用std::transform函数将v1v2中的元素复制到结果数组的开始和第二部分。接下来,我们对结果数组进行排序,并打印结果。

输出结果:

1 2 3 4 5 6 7 8

方法五:使用std::vector的insert()函数

最后,我们可以使用STL中的std::vectorinsert()函数来合并两个数组。

#include <algorithm>
#include <iostream>
#include <vector>

int main() {
  std::vector<int> v1 = {1, 3, 5, 7};
  std::vector<int> v2 = {2, 4, 6, 8};

  v1.insert(v1.end(), v2.begin(), v2.end());
  std::sort(v1.begin(), v1.end());

  for (int num : v1) {
    std::cout << num << " ";
  }
  std::cout << std::endl;
}

在这里,我们使用std::vectorinsert()函数将v2的元素插入到v1的末尾。接下来,我们对v1进行排序,并打印结果。

输出结果:

1 2 3 4 5 6 7 8

结论

这些是使用C++ STL合并两个数组的几种常用方法。使用STL函数可以帮助我们编写更简洁,更可读的代码,并且能够节省时间。无论你是刚开始学习C++,还是已经有经验的开发人员,这些方法都值得一试。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程