vector

[C++] vector2次元配列の要素数を取得する方法

C++で2次元配列を表現する際、std::vectorを使用することが一般的です。2次元配列の要素数を取得するには、まず外側のvectorのサイズをsize()メソッドで取得し、次に各内側のvectorのサイズを同様にsize()メソッドで取得します。

例えば、std::vector> matrixという2次元配列がある場合、行数はmatrix.size()で取得でき、列数はmatrix[i].size()で取得できます。

この方法を用いることで、動的にサイズが変わる2次元配列の要素数を簡単に管理できます。

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

このコードでは、rowCountcolumnCountを掛け合わせて全要素数を計算しています。

サンプルコードでの要素数取得

以下に、行数、列数、全要素数を一度に取得するサンプルコードを示します。

#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を活用したプログラムを実際に作成し、さらなるスキルアップを目指してみてはいかがでしょうか。

関連記事

Back to top button
目次へ