要素に構造体を持つ、vectorコンテナについて – プログラミング – Home

要素に構造体を持つ、vectorコンテ...
 
通知
すべてクリア

[解決済] 要素に構造体を持つ、vectorコンテナについて


見習い
 見習い
(@見習い)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

よろしくお願いします。
構造体、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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

どんなのが欲しいかによりますね。

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

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

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


返信引用
見習い
 見習い
(@見習い)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

επιστημη さんお世話になります。
そうですか、間違っていなかったんですんか・・・
そこで、配列を
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;
}


返信引用
見習い
 見習い
(@見習い)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

お世話になります。
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;
}


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

> /* 出力 */
> 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;
}


返信引用
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 15年前
投稿: 64
 

>> タテ/ヨコ共に可変長なら 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;
}
}


返信引用
見習い
 見習い
(@見習い)
ゲスト
結合: 13年前
投稿: 4
Topic starter  

επιστημη さん大変お世話になります。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました