2017-11-05 6 views
0

std :: vectorでかなり使いたいクラスを作成しましたサイズ。ただし、そのクラス内では、ベクター内の各要素について変更されないメンバーがあります(下の例ではcartesian)。クラスを作成する方法はありますか?そのベクトルを作るとき、ベクトル参照のすべての要素は同じ変数になりますか?あるいは、もっと重要なのは、ベクトル全体で同じメンバーになるメモリを使用しない方法ですか?私はクラスのすべてのインスタンスのためにそれがそのまま残るので、静的を使用したくないです、そして、この値は各ベクトルのために変わるかもしれません。私は一度デカルト設定し、それは全体のベクトルを変更したいのですがC++ユーザー定義クラスを作成してそのクラスのstd :: vectorにクラスの特定のメンバーが含まれないようにする方法

class foo 
{ 
public: 
    int x,y,z; 
    bool cartesian; 
    foo(int _x =0, int _y=0, int _z=0, int _cart = true) 
      :x(_x), y(_y), z(_z), cartesian(_cart) 
    { 
     /* code */ 
    } 
}; 


int main(){ 
    std::vector<foo> vec1; 
    vec1.emplace_back(0,0,1); 
    vec1.emplace_back(0,0,2); 
    vec1[0].cartesian = false; 
    cout<< vec1[1].cartesian << endl; 
    return 0; 
} 

例えば

(ので、この場合には第二の要素cartesianメンバーも偽になる。さらに良いことに、私がしたいですベクトル内の各要素に対してそれを作成するためにメモリを使用しないでください。

答えて

1

あなたの質問に答えるには:本当にそうではありません.1つのクラスのインスタンスは構造が同じです。あなたが共有したい場合は、値がより大きいオブジェクトでない限り、メモリ使用量に関しては何のメリットも得られません。

しかし、あなたは私が読ん「私はかつてデカルト設定し、それは全体のベクトルを変更したいのですが」と言うので、「ベクトルのためのデカルト属性を設定」:

私はあなたがコンテナを作成することを示唆していますスーパークラスとしてvectorを持つクラス。クラスはベクタの動作を継承し、そのコンテナクラスのインスタンスに共有値を追加できます。

3

いいえ。関連する変数を作成し、構造体にベクトルとともにパックします。

struct SomeFoos 
{ 
    std::vector<foo> theFoos; 
    bool cartesian; 
}; 
関連する問題