为什么以下代码有效呢?
struct A {
std::vector<A> subAs;
};
Run Code Online (Sandbox Code Playgroud)
A是不完整的类型,对吧?如果有一个A*s的矢量我会理解.但在这里,我不明白它是如何工作的.它似乎是一个递归的定义.
在程序的一个时间关键部分,有一个类的成员看起来像这样:std :: vector m_vLinks; 在分析期间,我注意到大约99.98%的执行此向量仅包含0或1个项目.然而,在极少数情况下它可能会持有更多.根据探查器,这个向量肯定是一个瓶颈,所以我正在考虑如下优化:
在开始对这个东西进行原型设计以确定它是否有帮助之前,我想知道是否有人在某些第三方库中遇到了具有类似功能的自定义容器?
我已经考虑过boost :: array,但是不希望它强加的大小限制
鉴于代码:
class Foo {
std::vector<int> items;
std::map<int, int> dictionary;
};
Run Code Online (Sandbox Code Playgroud)
如果没有任何东西被添加到上面的矢量或地图中,还是会分配一块缓冲存储器吗?(换句话说,缓冲区分配总是在容器创建期间发生,还是可以在调用push_back之类的函数之前推迟?)
是否存在处理初始STL容器缓冲区分配时间的标准,或者是否允许STL容器和编译器之间的行为不同?
注意:这个问题不是关于这样的容器会增加类Foo大小的额外字节.
(这个问题的一个相关子集强调分配大小是C++中向量的初始容量.)
我很抱歉,我问这样一个初学者问题,但我在网上发现了相互矛盾的信息.我会在大学问,但直到明年2月.
Do Vectors会自动调整大小吗?或者您需要定期检查当前大小,并在需要更多空间时调整大小.它看起来是自动调整大小,但我不确定这是一个功能还是编译器挥动魔杖.
c++ ×4
stl ×2
vector ×2
allocation ×1
member ×1
optimization ×1
stdmap ×1
stdvector ×1
templates ×1