C++のstd::vectorの使い方
- std::vectorとは
- std::vectorの基本操作
- std::vectorの主なメソッド
- std::vectorのイテレータ
- std::vectorのメモリ管理
- std::vectorの応用
- std::vectorのパフォーマンス最適化
std::vectorとは
std::vector
はC++標準ライブラリ(STL)の一部であり、動的配列として機能するコンテナクラスです。
通常の配列と違い、要素数を動的に増減でき、メモリ管理を自動で行ってくれるため、多くの場面で利用されます。
std::vectorの基本操作
std::vectorの宣言と初期化
ベクターの基本的な宣言方法を紹介します。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec1; // 空のvector
std::vector<int> vec2(5); // 要素数5のvector(初期値は0)
std::vector<int> vec3(5, 10); // 要素数5で初期値が10
std::vector<int> vec4 = {1, 2, 3, 4, 5}; // 初期値を指定
return 0;
}
要素の追加と削除
ベクターのサイズを変更するメソッドを紹介します。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
vec.push_back(1); // 末尾に1を追加
vec.push_back(2); // 末尾に2を追加
vec.pop_back(); // 末尾の要素を削除
return 0;
}
std::vectorの主なメソッド
サイズの取得
現在の要素数を取得するにはsize()
を使用します。
std::cout << "要素数: " << vec.size() << std::endl;
要素のアクセス
ベクターの要素へアクセスする方法を紹介します。
std::cout << vec[0] << std::endl; // 添字演算子
std::cout << vec.at(0) << std::endl; // 安全なアクセス
std::vectorのイテレータ
イテレータを使用したループ
イテレータを使用してベクターの全要素を出力する例です。
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
return 0;
}
std::vectorのメモリ管理
容量の確認
ベクターのメモリ容量を確認するにはcapacity()
を使用します。
std::cout << "容量: " << vec.capacity() << std::endl;
メモリを最適化
不要なメモリを解放するにはshrink_to_fit()
を使います。
vec.shrink_to_fit();
std::vectorの応用
std::vectorの2次元配列
ベクターを使って2次元配列を作成する例を紹介します。
#include <iostream>
#include <vector>
int main() {
std::vector<std::vector<int>> matrix(3, std::vector<int>(3, 0));
return 0;
}
std::vectorのソート
ベクターを昇順にソートする方法を紹介します。
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {3, 1, 4, 1, 5, 9};
std::sort(vec.begin(), vec.end());
return 0;
}
std::vectorのパフォーマンス最適化
std::vectorの事前確保
ベクターのサイズが分かっている場合、reserve()
を使用すると効率的です。
vec.reserve(100);
std::vectorの要素の移動
ムーブセマンティクスを使用して、コピーのオーバーヘッドを削減できます。
#include <iostream>
#include <vector>
std::vector<int> createVector() {
std::vector<int> temp = {1, 2, 3, 4, 5};
return std::move(temp);
}
int main() {
std::vector<int> vec = createVector();
return 0;
}