二次元配列を要素とするコンテナについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
akil
記事: 2
登録日時: 10年前

二次元配列を要素とするコンテナについて

#1

投稿記事 by akil » 10年前

二次元配列を要素とするコンテナ(実質三次元配列)を作ることは可能なのでしょうか?

コード:

vector<int [100][100]> a


コード:

vector<int **> b
としてもうまくいきません。

コード:

vector<vector<vector<int>>>> c
とやるほかないのでしょうか?

アバター
usao
記事: 1892
登録日時: 12年前
連絡を取る:

Re: 二次元配列を要素とするコンテナについて

#2

投稿記事 by usao » 10年前

>二次元配列を要素とするコンテナ

こんな…?

コード:

struct Array2D{  int val[100][100];  };

std::vector< Array2D > The3D;

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 二次元配列を要素とするコンテナについて

#3

投稿記事 by みけCAT » 10年前

akil さんが書きました:

コード:

vector<int **> b
としてもうまくいきません。
きちんと実装すればうまく行きそうだと思います。
ただ、よくわかりませんが「スマートポインタ」を使った方がいいのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

かずま

Re: 二次元配列を要素とするコンテナについて

#4

投稿記事 by かずま » 10年前

[2][3] ならいいけれど、[100][100]のようにサイズが大きいと
コピーに時間がかかります。

コード:

#include <iostream>
#include <vector>
using namespace std;
 
struct A2 {
    int v[3][4];
    int* operator[](size_t n) { return v[n]; }
};

int main()
{
    vector<A2> a(2);

    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            for (int k = 0; k < 4; k++) {
                cout << ' ' << &a[i][j][k];
                a[i][j][k] = (i+1)*100 + (j+1)*10 + (k+1);
            }
            cout << endl;
        }
        cout << endl;
    }
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            for (int k = 0; k < 4; k++) {
                cout << ' ' << a[i][j][k];
            }
            cout << endl;
        }
        cout << endl;
    }
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 二次元配列を要素とするコンテナについて

#5

投稿記事 by みけCAT » 10年前

たしかにコピーされるかという問題はありますね。
みけCAT さんが書きました:きちんと実装すればうまく行きそうだと思います。
この「きちんと実装すればうまく行きそう」というのは、「コンパイルエラーにならない」という意味です。
akil さんが書きました:

コード:

vector<vector<vector<int>>>> c
とやるほかないのでしょうか?
C++11のstd::arrayを使ったり

コード:

vector<std::array<std::array<int, 100>, 100> > a;
二次元配列もどきクラスを自作したり

コード:

struct array100x100 {
	int data[100 * 100];
	int* operator[](int idx) {
		return data + 100 * idx;
	}
};

vector<array100x100> a;
などの方法があります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る