要素に構造体を持つ、vectorコンテナについて

[戻る]
見習い 2012/01/14(土) 15:09:37
よろしくお願いします。
構造体、tagX 型を持つような、二次元のvectorはどのようにして、作成すればいいでし
ょうか。
このように考えたのですが、宣言の仕方も怪しいものです。
正しい、宣言の仕方と、データの挿入方法、取り出し方法をご教授願えないでしょうか。
#include <vector>
#include <iostream>

using namespace std;

typedef struct {
    int x;
    int y;
} tagX;

class CTagTest {
    tagX tx;
public:
    vector<tagX > tagx[10];
    vector<tagX >::iterator it[10];
};

int main()
{
    return 0;
}

環境
VS10 Ex

επιστημη [E-Mail] [HomePage] 2012/01/14(土) 17:11:25
"どんなのが欲しいか"によりますね。

vectorを10個欲しいならそれでいい。
あるいは array<vector<tagX>> とか。

タテ/ヨコ共に可変長なら vector<vector<tagX>> ですが。

どっちにしろ iteratorを配列で持っても意味ないと思う。
挿入操作のたびに無効になるかもしんないから。

見習い 2012/01/14(土) 17:57:09
επιστημη さんお世話になります。
そうですか、間違っていなかったんですんか・・・
そこで、配列を
vector<tagX > tagx[10];
このように宣言するとして、値を代入しようと、下記のように目論んだのですが、代入さ
れていません。
間違いを指摘して頂けないでしょうか。

#include <vector>
#include <iostream>

using namespace std;

typedef struct {
    int x;
    int y;
} tagX;

class CTagTest {
public:
    vector<tagX > tagx[10];
};

int main()
{
    CTagTest ctt;
    tagX tx;
    /* 入力 */
    for( int i = 0; i < 10; i++ ) {
        tx.x = i;        tx.y = i + 1;
        ctt.tagx[i].push_back(tx);
    }

    /* 出力 */
    for( int i = 0; i < 10; i++ ) {
        //目論見ではこれで、OUT PUT できるつもりだっが使い方が間違ってい
ます。
        //out << ctt.tagx[i].x << endl;
        //cout <<ctt.tagx[i].y << endl;
    }

    return 0;
}

見習い 2012/01/14(土) 18:44:34
お世話になります。
tagX 型の配列タテ5×ヨコ10を操作するのに、こんな風にやって見ましたがおかしく無い
でしょうか?
それからεπιστημη さんに掲示していただいた
>>タテ/ヨコ共に可変長なら vector<vector<tagX>> ですが。
これはどのように使ったらいいのでしょうか?
よろしくお願いします。

#include <vector>
#include <iostream>

using namespace std;

typedef struct {
    int x;
    int y;
} tagX;

class CTagTest {
public:
    vector<tagX > tagx[10];
    vector<vector<tagX> > v;
};

int main()
{
    CTagTest ctt;
    tagX tx;

    /* 入力 */
    for( int i = 0; i < 10; i++ ) {
        tx.x = 1;        tx.y = 10;
        ctt.tagx[0].push_back(tx);

        tx.x = 2;        tx.y = 200;
        ctt.tagx[1].push_back(tx);

        tx.x = 3;        tx.y = 300;
        ctt.tagx[2].push_back(tx);

        tx.x = 4;        tx.y = 400;
        ctt.tagx[3].push_back(tx);

        tx.x = 5;        tx.y = 500;
        ctt.tagx[4].push_back(tx);
    }


    /* 出力 */
    vector<tagX >::iterator it[5];

    it[0]    = ctt.tagx[0].begin();
    it[1]    = ctt.tagx[1].begin();
    it[2]    = ctt.tagx[2].begin();
    it[3]    = ctt.tagx[3].begin();
    it[4]    = ctt.tagx[4].begin();

    for( int i = 0; i < 10; i++ ) {
        cout << it[0]->x    << "             " <<    it[0]->y << 
endl;
        cout << it[1]->x    << "             " <<    it[1]->y << 
endl;
        cout << it[2]->x    << "             " <<    it[2]->y << 
endl;
        cout << it[3]->x    << "             " <<    it[3]->y << 
endl;
        cout << it[4]->x    << "             " <<    it[4]->y << 
endl;
    }

    return 0;
}

επιστημη [E-Mail] [HomePage] 2012/01/14(土) 19:38:17
>    /* 出力 */
>    for( int i = 0; i < 10; i++ ) {
>        //目論見ではこれで、OUT PUT できるつもりだっが使い方が間違っています。
>        //out << ctt.tagx[i].x << endl;
>        //cout <<ctt.tagx[i].y << endl;
>    }

    /* 出力 */
    for( int i = 0; i < 10; i++ ) {
       for ( vector<tagX>::iterator iter = ctt.tagx[i].begin();
             iter != ctt.tagx[i].end(); 
             ++iter ) {
         cout << iter->x << ',' << iter->y << ' ';
       }
       cout << endl;
    }

επιστημη [E-Mail] [HomePage] 2012/01/15(日) 11:07:21
>> タテ/ヨコ共に可変長なら vector<vector<tagX>> ですが。
> これはどのように使ったらいいのでしょうか?

#include <vector>
#include <iostream>
#include <iomanip>

using namespace std;

struct tagX {
    int x;
    int y;
}
;
/*
 * 0,0 〜 9,9 の和・積
 */
int main() {

    vector<vector<tagX>> v;
    tagX tx;

    /* 入力 */
    for ( int i = 0; i < 10; ++i ) {
      vector<tagX> row;
      for ( int j = 0; j < 10; ++j ) {
        tx.x = i+j; tx.y = i*j;
        row.push_back(tx);
      }
      v.push_back(row);
    }

    /* 出力 */
    for ( size_t x = 0; x < v.size(); ++x ) {
      for ( size_t y = 0; y < v[x].size(); ++y ) {
        cout << setw(2) << v[x][y].x << ':' 
             << setw(2) << v[x][y].y << "  ";
      }
      cout << endl;
    }
}

見習い 2012/01/15(日) 16:28:28
[[解決]]
επιστημη さん大変お世話になります。
ありがとうございました。

古いスレッドには追加発言できません。