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

[戻る]
こーひ 2002/06/06(木) 15:54:50
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]);
  }

}

こーひ 2002/06/06(木) 15:57:48
すみません。操作間違いをしましたので、追記して、再投稿します。

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 2002/06/06(木) 16:10:07
> でよいように思うのですが、クラス A の定義しだいで
> aVec[i] へのアクセスが、うまくいったりいかなかった
> りして、

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

PAI 2002/06/06(木) 16:10:48
たしかVC6.0のコンパイラのバグだったと思います。
for内スコープはなんか変です。

 A a;
 for (int i = 0; i < 5; i++) {
    a.x = i;
    aVec.push_back(a);
 }
 
こうすれば大丈夫です。

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