C++程序获取数组中前N个元素


数组是一种特殊的数据结构,用于存储或保存相同类型的数据(同构数据)在连续的内存位置。使用数组的最大优点是,我们可以使用索引参数从任何我们想要的位置访问它们。但是要插入和删除,则需要顺序操作,这使得这种数据结构成为线性数据结构。要从数组中检索元素,我们可以简单地使用索引或该元素在方括号内的位置编号。在本文中,我们将了解如何在 C++ 中读取数组中给定的前 k 个数字。

通过示例理解概念

Given array A = [10, 14, 65, 85, 96, 12, 35, 74, 69]
We have another number k = 4
The number of elements in A is 9

The output will be the first k elements from A, which are:
10, 14, 65, 85

对于任何数组,我们都有数组内的元素,另一个参数也很重要,即 n。n 表示数组中存在的有效元素的数量。n 可能不是数组的大小。数组最多可以容纳 Z 个元素,但只有 n 个是有效的,其余的是空闲空间。这里 k 必须小于或等于 n,否则我们无法从数组中获取 k 个元素。我们必须在获取元素之前检查它。让我们看看算法以获得清晰的理解。

算法

  • 读取输入数组 A。还要获取其中的元素数量:n 和 k 以从 A 读取前 k 个元素

  • 创建一个空数组 B

  • 如果 k < n,则

    • 对于 i 在 0 到 k - 1 的范围内,执行

      • B[ i ] = A[ i ]

    • 结束循环

  • 结束 if

  • 返回 B

示例

#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 pickFirstKElement( int A[], int n, int B[], int &m, int k) {
   if( k <= n ){
      for( int i = 0; i < k; i++ ) {
         B[ i ] = A[ i ];
         m = m + 1;
      }   
   }
}

int main() {
   int A[ Z ] = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14};
   int n = 12;
   
   int B[ Z ];
   int m = 0;
   
   cout << "Given Array: ";
   displayArr( A, n );
   
   pickFirstKElement( A, n, B, m, 7 );
   cout << "The first 7 element from A: ";
   displayArr( B, m );
   
   m = 0;
   
   pickFirstKElement( A, n, B, m, 10 );
   cout << "The first 10 element from A: ";
   displayArr( B, m );
}

输出

Given Array: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
The first 7 element from A: 57, 10, 14, 19, 86, 52, 32, 
The first 10 element from A: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65,

使用向量

在上述方法中,静态数组用于存储和从数组中获取元素。我们可以使用向量来做同样的事情。向量是 C++ STL 数据结构,是动态数组。让我们看看代码。算法与之前一样。

示例

#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;
}

vector<int> pickFirstKElement( vector<int> A, int k) {
   vector<int> B;
   if( k <= A.size() ){
      for( int i = 0; i < k; i++ ) {
         B.push_back( A[ i ] );
      }   
   }
   return B;
}

int main() {
   vector<int> A = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14}; 
   
   vector<int> B;
   
   cout << "Given Array: ";
   displayArr( A );
   
   B = pickFirstKElement( A, 7 );
   cout << "The first 7 element from A: ";
   displayArr( B ); 
   
   B = pickFirstKElement( A, 10 );
   cout << "The first 10 element from A: ";
   displayArr( B ); 
}

输出

Given Array: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
The first 7 element from A: 57, 10, 14, 19, 86, 52, 32, 
The first 10 element from A: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65,

使用向量构造函数

最后一种方法是一个手动过程,我们首先创建一个空向量,然后逐个复制元素。但是,我们可以使用向量构造函数中的向量迭代器直接复制前 k 个元素。让我们看看代码来理解这个概念。

示例

#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;
}

vector<int> pickFirstKElement( vector<int> A, int k) {
   vector<int> B( A.begin(), A.begin() + k );
   return B;
}

int main() {
   vector<int> A = {57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14}; 
   
   vector<int> B;
   
   cout << "Given Array: ";
   displayArr( A );
   
   B = pickFirstKElement( A, 7 );
   cout << "The first 7 element from A: ";
   displayArr( B ); 
   
   B = pickFirstKElement( A, 10 );
   cout << "The first 10 element from A: ";
   displayArr( B ); 
}

输出

Given Array: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65, 32, 14, 
The first 7 element from A: 57, 10, 14, 19, 86, 52, 32, 
The first 10 element from A: 57, 10, 14, 19, 86, 52, 32, 14, 76, 65,

这里,向量 B 使用向量 A 中的前 k 个元素创建。begin() 方法用于获取第一个项目的地址,并使用偏移量与 begin() 一起,我们可以最终得到 k 个元素。

结论

在本文中,我们看到了三种不同的方法来读取或获取给定数组中的前 n 个数字。第一种方法是使用静态默认数组,但第二种和第三种解决方案基于向量。前两种解决方案很简单。我们使用 for 循环逐个复制 k 个元素。最后一种方法是最简单的方法,我们使用向量构造函数,该构造函数通过使用其迭代器从另一个向量复制元素来创建一个向量。

更新于: 2022-12-13

989 次查看

开启你的 职业生涯

完成课程获得认证

开始学习
广告