在 C++ 中通過引用傳遞向量

Jinku Hu 2023年10月12日
  1. 使用 vector<T> &arr 表示法通過 C++ 中的引用傳遞向量
  2. 使用 const vector<T> &arr 表示法通過 C++ 中的引用傳遞向量
在 C++ 中通過引用傳遞向量

本文將演示有關如何在 C++ 中通過引用傳遞向量的多種方法。

使用 vector<T> &arr 表示法通過 C++ 中的引用傳遞向量

std::vector 是在 C++ 中儲存陣列的一種常用方法,因為它們為動態物件提供了多個內建函式來處理儲存的元素。請注意,vector 可能會佔用很大的記憶體,因此在將其傳遞給函式時應仔細考慮。通常,最佳做法是通過引用傳遞並在功能範圍內避開整個物件的副本。

在下面的示例中,我們演示了一個函式,該函式通過引用獲取單個整數向量並修改其元素。在主函式中的 multiplyByTwo 呼叫之前和之後,將列印 vector 元素。請注意,即使我們將返回值儲存在新變數 arr_mult_by2 中,我們也可以使用原始 arr 名稱訪問它,因為元素是在同一物件中修改的,並且沒有返回新副本。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

vector<int> &multiplyByTwo(vector<int> &arr) {
  for (auto &i : arr) {
    i *= 2;
  }
  return arr;
}

int main() {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  cout << "arr          - ";
  copy(arr.begin(), arr.end(), std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  auto arr_mult_by2 = multiplyByTwo(arr);

  cout << "arr_mult_by2 - ";
  copy(arr_mult_by2.begin(), arr_mult_by2.end(),
       std::ostream_iterator<int>(cout, "; "));
  cout << endl;

  return EXIT_SUCCESS;
}

輸出:

arr          - 1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
arr_mult_by2 - 2; 4; 6; 8; 10; 12; 14; 16; 18; 20;

使用 const vector<T> &arr 表示法通過 C++ 中的引用傳遞向量

另一方面,可以保證所傳遞的引用可以在函式定義中進行修改。const 限定符關鍵字提供了此功能,它告訴編譯器禁止在當前函式作用域中對給定物件進行任何修改。請注意,這似乎是可選的細節,不需要在開發人員中強調,但是有時這些關鍵字可以幫助編譯器優化機器程式碼以獲得更好的效能。

#include <iostream>
#include <iterator>
#include <vector>

using std::copy;
using std::cout;
using std::endl;
using std::string;
using std::vector;

vector<int> &multiplyByTwo(vector<int> &arr) {
  for (auto &i : arr) {
    i *= 2;
  }
  return arr;
}

void findInteger(const vector<int> &arr) {
  int integer = 10;
  for (auto &i : arr) {
    if (i == integer) {
      cout << "found - " << integer << " in the array" << endl;
      return;
    }
  }
  cout << "couldn't find - " << integer << " in the array" << endl;
}

int main() {
  vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

  auto arr_mult_by2 = multiplyByTwo(arr);

  findInteger(arr);
  findInteger(arr_mult_by2);

  return EXIT_SUCCESS;
}

輸出:

found - 10 in the array
found - 10 in the array
作者: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

DelftStack.com 創辦人。Jinku 在機器人和汽車行業工作了8多年。他在自動測試、遠端測試及從耐久性測試中創建報告時磨練了自己的程式設計技能。他擁有電氣/ 電子工程背景,但他也擴展了自己的興趣到嵌入式電子、嵌入式程式設計以及前端和後端程式設計。

LinkedIn Facebook

相關文章 - C++ Vector