gpt4 book ai didi

c++ - vector::push_back 和访问 C++ 中 Vector Pointer 中的值

转载 作者:太空宇宙 更新时间:2023-11-04 12:12:45 25 4
gpt4 key购买 nike

编辑:this 回答了以下问题.我有一个新的更新问题,使用它是否更有效:(我的 friend 说放置一个 vector 的 vector 是低效的,因为它使用顺序内存并且当你 push_back 时重新分配意味着它需要更多时间来找到位置可以为整个大 vector 放置一 block 内存)

(其中 Picture 是线的 vector ,Line 是点的 vector )

std::vector<Point> *LineVec;
std::vector<Line> PictureVec;

versus

std::vector<Point> LineVec;
std::vector<Line> PictureVec;


struct Point{
int x;
int y;
}

我正在尝试获取 vector 的 vector ,我的 friend 告诉我,放置 vector 的 vector 效率很低,因为它使用顺序内存,而 vector 的 vector 需要大量空间。所以他建议的是使用指针 vector 的 vector 。因此内部 vector 看起来像这样。显然,我是 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 的指针的 vector 并不比 vector 的 vector 更有效。它的效率较低,因为它引入了额外的间接级别。它还不会导致生成的二维数组的所有元素被连续分配。

原因是 vector 实际上是指向数组的指针,在某种意义上说 vector<T>大致实现为

 template <typename T>
class vector
{
T *p; // pointer to array of elements
size_t nelems, capacity;

public:
// interface
};

因此 vector 的 vector 在性能方面的行为类似于指向数组的指针的动态数组。

[注意:我无法引用 C++ 标准章节,但我很确定它限制了 std::vector的操作和复杂性,以上是实现它的唯一实用方法。]

关于c++ - vector::push_back 和访问 C++ 中 Vector Pointer 中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9132851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com