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 次檢視

開啟你的 職業生涯

完成課程獲得認證

開始學習
廣告

© . All rights reserved.