C++におけるstd::vectorと配列の違い:vectorの利点と欠点を徹底解説
C++では、std::vectorと従来の配列(array)のどちらを使うべきか迷うことがあります。この記事では、vectorが配列と比べて持つ利点と欠点を、具体的なコード例とともにわかりやすく解説します。
vectorと配列の基本的な違い
- テンプレートクラス vs 言語組み込み機能:vectorはC++標準ライブラリが提供するテンプレートクラスであり、C++特有の構成要素です。一方、配列は言語に組み込まれた機能であり、C言語をはじめとする多くのプログラミング言語に存在します。
- 実装方式の違い:vectorはリストインターフェースを持つ動的配列として実装されています。配列は、静的または動的な方法で確保でき、プリミティブなデータ型を直接扱います。
静的配列・動的配列・vectorの宣言例
#include <iostream>
#include <vector>
using namespace std;
int main() {
int array[10]; // 静的に確保された配列
int* arr = new int[10]; // 動的に確保された配列
vector<int> vec; // 動的サイズを持つvector
return 0;
}
サイズの柔軟性
配列のサイズは固定です。一度配列を作成すると、後からサイズを変更することはできません。一方、vectorのサイズは動的です。新しい要素を追加する際に十分な領域がなければ、自動的に新しいメモリ領域(予備のスペースも含めて)を確保してくれます。
メモリ管理の自動化
動的に確保した配列は、使用後に手動で解放(delete[])する必要があります。解放を忘れるとメモリリークが発生します。一方、vectorは変数がスコープを抜けると自動的にメモリを解放するため、手動での解放作業が不要です。
メモリ解放の例
#include <iostream>
#include <vector>
using namespace std;
int main() {
int* arr = new int[10]; // 動的に確保された配列
delete[] arr; // 手動で解放する必要がある
vector<int> vec; // スコープを抜けると自動的に解放される
return 0;
}
サイズの取得
動的に確保した配列のサイズは、簡単に取得することができません。vectorであれば、size()メンバ関数を使って定数時間(O(1))でサイズを取得できます。
関数への引数渡し
配列を関数の引数として渡す場合、配列はポインタに退化するため、サイズや長さを表す別の変数も一緒に渡す必要があります。vectorを渡す場合は、そのような追加の変数は不要で、シンプルに受け渡しができます。
関数からの戻り値
配列は、動的に確保したnewによる配列を使わない限り、関数の戻り値として返すことができません。一方、vectorは関数から直接返すことができます。
まとめ
vectorは、動的なサイズ変更、自動メモリ管理、簡単なサイズ取得、関数との柔軟な受け渡しなど、多くの面で配列よりも安全で便利です。ただし、パフォーマンスが厳しく要求される場面や、サイズが固定で十分な場合には、配列やstd::arrayが適していることもあります。用途に応じて適切に使い分けることが重要です。
-
C++でvector(ベクトル)を並べ替える方法:std::sort()の使い方
C++でvector(可変長配列)を並べ替えるには、標準ライブラリの std::sort() 関数を使用します。この関数は <algorithm> ヘッダーで定義されており、デフォルトでは要素を昇順(小さい順)に並べ替えます。 また、安定ソートを行いたい場合は std::stable_sort を使用します。これは sort() と同じように動作しますが、値が等しい要素同士の相対的な順序を保持する点が異なります。さらに、要件に応じてクイックソートやマージソートなどのアルゴリズムを自前で実装して利用することも可能です。なお、std::sort() の平均計算量は O(N log N
-
C++で配列を並べ替える方法|選択ソートの仕組みと実装例を解説
C++では、さまざまなソート(並べ替え)アルゴリズムを使って配列を整列できます。ソート済みの配列とは、数値の大小順やアルファベット順など、何らかの基準に従って要素が並び替えられた配列のことです。代表的なソートアルゴリズムには、バブルソート、挿入ソート、選択ソート、マージソート、クイックソート、ヒープソートなどがあります。本記事では、その中でも構造がシンプルで理解しやすい「選択ソート」を取り上げ、実際のコード例とともに詳しく解説していきます。 選択ソートとは? 選択ソートは、未ソート部分の中から最小値を繰り返し探し出し、それを未ソート部分の先頭にある要素と交換することで、配列全体を昇順に整列さ