C++程序:将一个数组推入另一个数组


数组是一种线性的顺序数据结构,用于在一系列内存区域中存储同构数据。与其他数据结构一样,数组需要具备某些特性才能有效地插入、删除、遍历和更新元素。在C++中,我们的数组是静态的。此外,C++还提供了一些动态数组结构。静态数组最多可以存储Z个元素。目前其中有n个元素。在本文中,我们将了解如何在C++中将一个数组的元素推入另一个数组。

通过示例理解概念

Given array A = [10, 14, 65, 85, 96, 12, 35, 74, 69]
Another given array B = [56, 42, 15, 18, 20, 32]

Pushing the elements of B into A, signifies that A becomes:
A = [10, 14, 65, 85, 96, 12, 35, 74, 69, 56, 42, 15, 18, 20, 32]

在上面的例子中,很明显我们有两个数组A和B。将B推入A意味着将B中存在的所有元素插入到数组A中。这些元素将添加到A的末尾。但是要实现这一点,我们必须检查A中剩余的槽位(即A的最大大小 - A中现有元素的数量)是否等于或大于B中元素的数量。否则,我们无法将它们推入A中。让我们看看算法以及C++实现代码。

算法

  • 将数组A和B作为输入,A中元素的数量n作为输入,B中元素的数量m作为输入

  • 如果A有足够的空间容纳整个B,则

  • 对于B中的每个元素e,执行

  • 将e添加到数组A

  • 结束循环

  • 结束if

  • 返回数组A和新的大小n

示例

#include <iostream>
# define Z 50

using namespace std;

void displayArr(int arr[], int n){
   for( int i = 0; i < n; i++ ){
      cout << arr[ i ] << ", ";
   }
   cout << endl;
}
void insertAtEnd( int arr[], int &n, int e ){
   if( n < Z ) {
      arr[ n ] = e;
   }
   n = n + 1;
}

void pushArrayToAnother( int A[], int &n, int B[], int m ) {
   if( (Z - n) >= m ){
      for( int i = 0; i < m; i++ ) {
         insertAtEnd( A, n, B[i] );   
      }
   }
}

int main() {
   int A[ Z ] = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14};
   int n = 12;
   
   int B[ Z ] = {56, 84, 23, 12, 17, 19, 65, 32};
   int m = 8;
   
   cout << "First Array: ";
   displayArr( A, n );
   
   cout << "Second Array: ";
   displayArr( B, m );
   
   pushArrayToAnother( A, n, B, m );
   cout << "Array A after pushing B:" << endl;
   displayArr( A, n );
}

输出

First Array: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Second Array: 56, 84, 23, 12, 17, 19, 65, 32, 
Array A after pushing B:
57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 56, 84, 23, 12, 17, 19, 65, 32,

使用动态数组或向量

可以使用向量来完成相同的事情。向量是C++ STL中存在的动态数组。如果我们考虑向量,我们不需要关心可用的插入元素的空间。因为向量是动态的。它会在需要时自动添加新的槽位。算法相同,无需检查可用槽位。

算法

  • 将数组A和B作为输入,A中元素的数量n作为输入,B中元素的数量m作为输入

  • 对于B中的每个元素e,执行

    • 将e添加到数组A

  • 结束循环

  • 返回数组A和新的大小n

示例

#include <iostream>
#include <vector>
# define Z 50

using namespace std;

void displayArr( vector<int> v ){
   for( int i = 0; i < v.size() ; i++ ) {
      cout << v[ i ] << ", ";
   }
   cout << endl;
}

void pushArrayToAnother( vector<int> &A, vector<int> B ){
   for( int i = 0; i < B.size() ; i++ ) {
      A.push_back( B[i] );
   }
}

int main(){
   vector<int> A = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14};

   vector<int> B = {56, 84, 23, 12, 17, 19, 65, 32};

   cout << "First Array: ";
   displayArr( A );

   cout << "Second Array: ";
   displayArr( B );

   pushArrayToAnother( A, B );
   cout << "Array A after pushing B:" << endl;
   displayArr( A );
}

输出

First Array: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Second Array: 56, 84, 23, 12, 17, 19, 65, 32, 
Array A after pushing B:
57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 56, 84, 23, 12, 17, 19, 65, 32,

使用向量中的insert()函数

以前的方法是一个手动过程。但是,我们可以使用向量STL中的insert()函数来完成相同的事情。insert()函数接收一个位置指针(使用迭代器)和一个迭代器,从一个容器对象复制元素并将元素从位置索引复制到另一个容器对象。让我们看看C++实现,以便更清晰地了解。

示例

#include <iostream>
#include <vector>
# define Z 50

using namespace std;

void displayArr( vector<int> v ){
   for( int i = 0; i < v.size() ; i++ ){
      cout << v[ i ] << ", ";
   }
   cout << endl;
} 

void pushArrayToAnother( vector<int> &A, vector<int> B ) { 
   A.insert( A.end(), B.begin(), B.end() ); 
}

int main() {
   vector<int> A = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14};
   
   vector<int> B = {56, 84, 23, 12, 17, 19, 65, 32};
   
   cout << "First Array: ";
   displayArr( A );
   
   cout << "Second Array: ";
   displayArr( B );
   
   pushArrayToAnother( A, B );
   cout << "Array A after pushing B:" << endl;
   displayArr( A );
}

输出

First Array: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
Second Array: 56, 84, 23, 12, 17, 19, 65, 32, 
Array A after pushing B:
57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 56, 84, 23, 12, 17, 19, 65, 32,

结论

在本文中,我们已经看到了几种不同的方法来将一个数组元素插入或推入另一个数组的末尾。在第一个示例中,使用了简单的C++数组,我们需要特别注意静态数组内的可用空间。在接下来的两种方法中,我们不需要关心这一点,因为我们使用的是向量,它是动态的,并且会在需要时自动分配空间。

更新于:2022年12月13日

6K+ 次浏览

启动你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.