クラスを変数とする vecotr の作り方 – プログラミング – Home

クラスを変数とする vecotr の作...
 
通知
すべてクリア

クラスを変数とする vecotr の作り方


こーひ
 こーひ
(@こーひ)
ゲスト
結合: 23年前
投稿: 6
Topic starter  

STL の vector でクラスを変数とするクラスを新たに作りたいのですが、
うまくいかずに困っています。

class A {
public:
int x;
pubilc:
A() {};
~A() {};
};

とした場合、クラス A の vector を作るには、

void main()
{
std::vector<A> aVec;

for (int i = 0; i < 5; i++) {
A a;
a.x = i;
aVec.push_back(a);
}

for (i = 0; i < aVec.size(); i++) {
printf(%d\n, aVec[i]);
}
}

でよいように思うのですが、クラス A の定義しだいで
aVec[i] へのアクセスが、うまくいったりいかなかった
りして、出力が、

0
1
2
3
4

のときと

4
4
4
4
4

のときがあります。

やはりクラスのポインタを変数とするクラスを使って、

void main()
{
std::vector<A*> apVec;

for (int i = 0; i < 10; i++) {
A *ap = new A;
ap->x = i;
apVec.push_back(ap);
}

for (i = 0; i < aVec.size(); i++) {
printf(%d\n, aVec[i]);
}

}


引用解決済
トピックタグ
こーひ
 こーひ
(@こーひ)
ゲスト
結合: 23年前
投稿: 6
Topic starter  

すみません。操作間違いをしましたので、追記して、再投稿します。

STL の vector でクラスを変数とするクラスを新たに作りたいのですが、
うまくいかずに困っています。

class A {
public:
int x;
pubilc:
A() {};
~A() {};
};

とした場合、クラス A の vector を作るには、

void main()
{
std::vector<A> aVec;

for (int i = 0; i < 5; i++) {
A a;
a.x = i;
aVec.push_back(a);
}

for (i = 0; i < aVec.size(); i++) {
printf(%d\n, aVec[i].x);
}
}

でよいように思うのですが、クラス A の定義しだいで
aVec[i] へのアクセスが、うまくいったりいかなかった
りして、出力が、

0
1
2
3
4

のときと

4
4
4
4
4

のときがあります。

やはりクラスのポインタを変数とするクラスを使って、

void main()
{
std::vector<A*> apVec;

for (int i = 0; i < 10; i++) {
A *ap = new A;
ap->x = i;
apVec.push_back(ap);
}

for (i = 0; i < apVec.size(); i++) {
printf(%d\n, apVec[i]->x);
}
}

とすべきなのでしょうか。
後で、メモリを開放しなければならないので、できれば
クラスの実態を vector で扱いたいのですが。。。

よろしくお願いします。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

> でよいように思うのですが、クラス A の定義しだいで
> aVec[i] へのアクセスが、うまくいったりいかなかった
> りして、

うまくいかない場合のコードを示してもらわないと、
なんとも言えません。


返信引用
PAI
 PAI
(@PAI)
ゲスト
結合: 23年前
投稿: 359
 

たしかVC6.0のコンパイラのバグだったと思います。
for内スコープはなんか変です。

A a;
for (int i = 0; i < 5; i++) {
a.x = i;
aVec.push_back(a);
}

こうすれば大丈夫です。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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