【发布时间】:2012-02-03 17:30:14
【问题描述】:
编辑:this 回答了以下问题。我有一个新的更新问题,使用起来效率更高吗:(我的朋友说放置向量的向量效率低,因为它使用顺序内存并且在 push_back 时重新分配意味着需要更多时间来找到可以为整个大向量放置一块内存)
(其中 Picture 是线的向量,Line 是点的向量)
std::vector<Point> *LineVec;
std::vector<Line> PictureVec;
versus
std::vector<Point> LineVec;
std::vector<Line> PictureVec;
struct Point{
int x;
int y;
}
我正在尝试获取向量的向量,我的朋友告诉我放置向量的向量效率低下,因为它使用顺序内存,而向量的向量将需要大量空间。所以他建议的是使用指针向量的向量。因此内部向量看起来像这样。显然,我对 C++ 很陌生,如果有任何见解,我将不胜感激。
struct Shape{
int c;
int d;
}
std::vector<Shape> *intvec;
当我想推回这个时,我会怎么做?像这样?
Shape s;
s.c=1;
s.d=1;
intvec->push_back(s);
另外,我写了一个迭代器,但它似乎不起作用,因此我认为上面的代码不起作用。最后我担心的是,虽然上面的代码有效,但它为我的输出提供了非常奇怪的值。 7 位长的大数,绝对不是我为 s.c 和 s.d 输入的值
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 指针(使用新的 std::vector
())? -
@larsmans 向量对象本身不是指针,但它在内部包含指向缓冲区的指针,我知道你知道但仍想将其溢出 xD
-
谢谢@larsmans,只是想知道,你能回答这个问题,以便我可以将你的答案标记为正确吗?