相关疑难解决方法(0)

如何声明同一个类的成员向量?

为什么以下代码有效呢?

struct A {
    std::vector<A> subAs;
};
Run Code Online (Sandbox Code Playgroud)

A是不完整的类型,对吧?如果有一个A*s的矢量我会理解.但在这里,我不明白它是如何工作的.它似乎是一个递归的定义.

c++ templates vector member incomplete-type

46
推荐指数
1
解决办法
2254
查看次数

std :: vector-like类优化以容纳少量项目

在程序的一个时间关键部分,有一个类的成员看起来像这样:std :: vector m_vLinks; 在分析期间,我注意到大约99.98%的执行此向量仅包含0或1个项目.然而,在极少数情况下它可能会持有更多.根据探查器,这个向量肯定是一个瓶颈,所以我正在考虑如下优化:

  1. 使用类似矢量的界面制作手工制作的类
  2. 这个类将包含真正的大小,一个项目和指向向量的可选指针
  3. 在这种情况下,当vector保存1个项目时,将不会有任何动态内存分配,并且由于删除了一个间接,访问该项目也会(更快).
  4. 当我们需要持有更多数据时,动态分配向量
  5. 当然,这个向量不会提供一个存储块来保存所有项目(这里不需要),而且一些操作也会更复杂

在开始对这个东西进行原型设计以确定它是否有帮助之前,我想知道是否有人在某些第三方库中遇到了具有类似功能的自定义容器?

我已经考虑过boost :: array,但是不希望它强加的大小限制

c++ optimization stl micro-optimization

19
推荐指数
3
解决办法
5326
查看次数

未使用的STL容器是否分配内存?

鉴于代码:

class Foo {
  std::vector<int> items;
  std::map<int, int> dictionary;
};
Run Code Online (Sandbox Code Playgroud)
  1. 如果没有任何东西被添加到上面的矢量或地图中,还是会分配一块缓冲存储器吗?(换句话说,缓冲区分配总是在容器创建期间发生,还是可以在调用push_back之类的函数之前推迟?)

  2. 是否存在处理初始STL容器缓冲区分配时间的标准,或者是否允许STL容器和编译器之间的行为不同?

注意:这个问题不是关于这样的容器会增加类Foo大小的额外字节.

(这个问题的一个相关子集强调分配大小是C++中向量的初始容量.)

c++ stl allocation stdmap stdvector

13
推荐指数
2
解决办法
1551
查看次数

Do Vectors会自动调整大小吗?

我很抱歉,我问这样一个初学者问题,但我在网上发现了相互矛盾的信息.我会在大学问,但直到明年2月.

Do Vectors会自动调整大小吗?或者您需要定期检查当前大小,并在需要更多空间时调整大小.它看起来是自动调整大小,但我不确定这是一个功能还是编译器挥动魔杖.

c++ vector

7
推荐指数
2
解决办法
1万
查看次数