C++ で参照によってベクトルを渡す
胡金庫
2023年10月12日
この記事では、C++ で参照によってベクトルを渡す方法に関する複数の方法を示します。
C++ で vector<T> &arr
表記を使用して参照によりベクトルを渡する
std::vector
は、配列を C++ で格納する一般的な方法です。これは、格納された要素を操作するための複数の組み込み関数を動的オブジェクトに提供するためです。vector
は非常に大きなメモリフットプリントを持つ可能性があるため、関数に渡すときは慎重に検討する必要があることに注意してください。通常、参照渡しを行い、オブジェクト全体のコピーを関数スコープに回避することをお勧めします。
次の例では、参照によって int
の単一のベクトルを取得し、その要素を変更する関数を示します。vector
要素は、main 関数の multiplyByTwo
呼び出しの前後に出力されます。戻り値を新しい変数 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;
C++ で const vector<T> &arr
表記を使用して参照によりベクトルを渡する
一方、渡された参照が関数定義の変更のためにアクセス可能であることを保証できます。この機能は、現在の関数スコープ内の特定のオブジェクトへの変更を禁止するようコンパイラーに指示する 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
著者: 胡金庫