編集:以下の質問はthisによって回答されました。私は新しい更新された質問がある、それはそれ以上使用すること効率的です:(私の友人は、シーケンシャルメモリを使用しているので、ベクトルのベクトルを置くことは非効率的で、push_back時にreallocは、全体の大きなベクターのためのメモリのチャンクを配置することができます)ベクトル:: push_backとC++のベクトルポインタの値にアクセス
(写真ラインのベクトルであり、ラインがポイントのベクトルである)
std::vector<Point> *LineVec;
std::vector<Line> PictureVec;
versus
std::vector<Point> LineVec;
std::vector<Line> PictureVec;
struct Point{
int x;
int y;
}
私はAのベクトルを取得しようとしています私の友人は、シーケンシャルメモリを使用し、ベクトルのベクトルは膨大な量のスペースを必要とするため、ベクトルのベクトルを置くことは効率が悪いと私に言った。だから彼が提案したのは、ポインタベクトルのベクトルを使うことでした。したがって、内側のベクトルは次のようになります。明らかに私はC++には非常に新しいので、どんな洞察にも感謝します。
struct Shape{
int c;
int d;
}
std::vector<Shape> *intvec;
私はこれをどのようにしてやりますか?このようなもの?
Shape s;
s.c=1;
s.d=1;
intvec->push_back(s);
はまた、私は、しかし、私が上記のコードは動作しないと思う理由それゆえ、動作するようには思えない、通過するイテレータを書きました。最後に私の最後の懸念は、上記のコードが動作する間、私の出力のために本当に奇妙な値を与えることです。 7桁の長さであり、私は、SCのために入れて、ベクター自体の上にベクトルへのポインタを使用する方が効率的であるかどうかについてのあなたの更新の質問に関しては
for(std::vector<Shape>::iterator it=Shapes->begin();it<Shapes->end();it++){
Shape s = (*it);
std::cout << s.c << s.d << std::endl;
}
あなたの友人は間違っています。'vector'オブジェクト自体は、連続した配列へのポインタ (いくつかの追加のメンバと共に)です。そのため、間接的なレベルのインダイレクションを導入し、さらにスペースを無駄にしています。 –
正確には動作しません。コンパイラエラー?ランタイムエラー?あなたはintvecポインタをどこでもintalizeしますか?(新しいstd :: vector())? –
Fox32
@larsmansベクターオブジェクト自体はポインタではありませんが、内部的にバッファへのポインタが含まれていますが、それでも知っていますが、それでもなおxDを流したかったのです –