[C++] vector2次元配列の要素数を取得する方法
C++で2次元配列を表現する際、std::vector
を使用することが一般的です。2次元配列の要素数を取得するには、まず外側のvector
のサイズをsize()
メソッドで取得し、次に各内側のvector
のサイズを同様にsize()
メソッドで取得します。
例えば、std::vector> matrix
という2次元配列がある場合、行数はmatrix.size()
で取得でき、列数はmatrix[i].size()
で取得できます。
この方法を用いることで、動的にサイズが変わる2次元配列の要素数を簡単に管理できます。
- 2次元vectorの行数、列数、全要素数の取得方法
- 2次元vectorの動的なサイズ変更の方法
- 要素の追加、削除、検索の実践的な手法
- 2次元vectorを用いた行列演算の実例
- データの入れ替えを行うための具体的な方法
2次元vectorの要素数を取得する方法
C++で2次元のvectorを扱う際、要素数を正確に把握することは非常に重要です。
ここでは、行数、列数、そして全要素数の取得方法について詳しく解説します。
行数の取得方法
2次元vectorの行数は、外側のvectorのサイズを取得することで得られます。
以下のようにsize()メソッド
を使用します。
#include <iostream>
#include <vector>
int main() {
// 2次元vectorの定義
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 行数の取得
size_t rowCount = matrix.size();
std::cout << "行数: " << rowCount << std::endl;
return 0;
}
行数: 3
このコードでは、matrix.size()
を使用して行数を取得しています。
行数は外側のvectorのサイズに相当します。
列数の取得方法
列数は、通常、各行のvectorのサイズを取得することで得られます。
以下の例では、最初の行のサイズを使用して列数を取得しています。
#include <iostream>
#include <vector>
int main() {
// 2次元vectorの定義
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 列数の取得
size_t columnCount = matrix[0].size();
std::cout << "列数: " << columnCount << std::endl;
return 0;
}
列数: 3
このコードでは、matrix[0].size()
を使用して列数を取得しています。
注意点として、すべての行が同じ列数を持つことを前提としています。
全要素数の計算方法
全要素数は、行数と列数を掛け合わせることで計算できます。
以下の例では、行数と列数を用いて全要素数を計算しています。
#include <iostream>
#include <vector>
int main() {
// 2次元vectorの定義
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 行数と列数の取得
size_t rowCount = matrix.size();
size_t columnCount = matrix[0].size();
// 全要素数の計算
size_t totalElements = rowCount * columnCount;
std::cout << "全要素数: " << totalElements << std::endl;
return 0;
}
全要素数: 9
このコードでは、rowCount
とcolumnCount
を掛け合わせて全要素数を計算しています。
サンプルコードでの要素数取得
以下に、行数、列数、全要素数を一度に取得するサンプルコードを示します。
#include <iostream>
#include <vector>
int main() {
// 2次元vectorの定義
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 行数、列数、全要素数の取得
size_t rowCount = matrix.size();
size_t columnCount = matrix[0].size();
size_t totalElements = rowCount * columnCount;
std::cout << "行数: " << rowCount << std::endl;
std::cout << "列数: " << columnCount << std::endl;
std::cout << "全要素数: " << totalElements << std::endl;
return 0;
}
行数: 3
列数: 3
全要素数: 9
このサンプルコードでは、行数、列数、全要素数を一度に取得し、それぞれを出力しています。
これにより、2次元vectorの構造を簡単に把握することができます。
応用例
2次元vectorは、柔軟なデータ構造としてさまざまな応用が可能です。
ここでは、2次元vectorの動的なサイズ変更、要素の追加と削除、要素の検索、行列演算、データの入れ替えについて解説します。
2次元vectorの動的なサイズ変更
2次元vectorのサイズは動的に変更可能です。
resize()メソッド
を使用して、行や列の数を変更できます。
#include <iostream>
#include <vector>
int main() {
// 初期の2次元vector
std::vector<std::vector<int>> matrix(2, std::vector<int>(3, 0));
// 行数を3に変更
matrix.resize(3);
// 各行の列数を4に変更
for (auto& row : matrix) {
row.resize(4, 0);
}
// 結果の表示
for (const auto& row : matrix) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
0 0 0 0
0 0 0 0
0 0 0 0
このコードでは、行数を3に、各行の列数を4に変更しています。
2次元vectorの要素の追加と削除
2次元vectorに要素を追加するにはpush_back()
を、削除するにはpop_back()
を使用します。
#include <iostream>
#include <vector>
int main() {
// 初期の2次元vector
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6}
};
// 新しい行を追加
matrix.push_back({7, 8, 9});
// 最後の行を削除
matrix.pop_back();
// 結果の表示
for (const auto& row : matrix) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
1 2 3
4 5 6
このコードでは、新しい行を追加し、その後に最後の行を削除しています。
2次元vectorの要素の検索
2次元vector内の要素を検索するには、ネストされたループを使用します。
#include <iostream>
#include <vector>
int main() {
// 2次元vectorの定義
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 検索する値
int target = 5;
bool found = false;
// 要素の検索
for (size_t i = 0; i < matrix.size(); ++i) {
for (size_t j = 0; j < matrix[i].size(); ++j) {
if (matrix[i][j] == target) {
std::cout << "値 " << target << " は位置 (" << i << ", " << j << ") にあります。" << std::endl;
found = true;
break;
}
}
if (found) break;
}
if (!found) {
std::cout << "値 " << target << " は見つかりませんでした。" << std::endl;
}
return 0;
}
値 5 は位置 (1, 1) にあります。
このコードでは、指定した値を検索し、その位置を出力しています。
2次元vectorを使った行列演算
2次元vectorを用いて行列の加算を行う例を示します。
#include <iostream>
#include <vector>
int main() {
// 2つの行列の定義
std::vector<std::vector<int>> matrixA = {
{1, 2, 3},
{4, 5, 6}
};
std::vector<std::vector<int>> matrixB = {
{7, 8, 9},
{10, 11, 12}
};
// 結果行列の定義
std::vector<std::vector<int>> result(2, std::vector<int>(3, 0));
// 行列の加算
for (size_t i = 0; i < matrixA.size(); ++i) {
for (size_t j = 0; j < matrixA[i].size(); ++j) {
result[i][j] = matrixA[i][j] + matrixB[i][j];
}
}
// 結果の表示
for (const auto& row : result) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
8 10 12
14 16 18
このコードでは、2つの行列を加算し、その結果を出力しています。
2次元vectorのデータの入れ替え
2次元vector内のデータを入れ替えるには、std::swap()
を使用します。
#include <iostream>
#include <vector>
#include <algorithm> // std::swapを使用するために必要
int main() {
// 2次元vectorの定義
std::vector<std::vector<int>> matrix = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
// 行の入れ替え
std::swap(matrix[0], matrix[2]);
// 結果の表示
for (const auto& row : matrix) {
for (int val : row) {
std::cout << val << " ";
}
std::cout << std::endl;
}
return 0;
}
7 8 9
4 5 6
1 2 3
このコードでは、最初の行と最後の行を入れ替えています。
std::swap()
を使用することで、簡単にデータの入れ替えが可能です。
よくある質問
まとめ
この記事では、C++における2次元vectorの要素数の取得方法や応用例について詳しく解説しました。
2次元vectorの行数や列数の取得方法から、動的なサイズ変更や要素の追加・削除、行列演算まで、幅広い操作方法を学びました。
これを機に、2次元vectorを活用したプログラムを実際に作成し、さらなるスキルアップを目指してみてはいかがでしょうか。