【问题标题】:std::vector is very slow?std::vector 很慢?
【发布时间】:2010-07-11 17:14:46
【问题描述】:

这就是我正在做的事情。

我有一个我实例化的类,它有一个 std::vector。

当我第一次实例化这个类时,这个 std::vector 是空的。

我使用它的方式是我以指数方式添加并清除它。例如:

添加一个数字,清除向量:

添加2个数字,清除向量:

添加3个数字,清除向量,

添加4个数字,清除向量。 ......

std::vector 是我正在做的最好的方式吗? 我试图在构造函数中做 reserve(100,000) 但这没有帮助。

是否有更好的容器供我使用?

谢谢

【问题讨论】:

  • 你到底想做什么?
  • 也许问题出在你的算法而不是你的数据结构上?
  • 您的课堂使用情况如何?如果您一直对其进行复制(例如通过值而不是引用传递),则内部具有非常大向量的类将不会表现良好。显示更多关于如何使用您的类的代码。
  • 你是一直在向量的末尾加点(用push_back),还是在中间加点?
  • 观察信息不足造成的混乱。您知道我们不知道的事情,并且您必须意识到将事物添加到向量中以清除它们听起来很琐碎且无用。你在这些事件之间做些什么吗?矢量数据有什么用? 什么是更大的图景?

标签: c++ vector performance


【解决方案1】:

您的算法似乎是二次的。如果你真的需要 100,000 个元素,你将添加一个元素 1 + 2 + 3 + ... + 100,000 次。这大约是 5,000,000,000 次操作。无论您使用的是std::vector 还是手工制作的汇编语言,这么多操作,无论它们多么微不足道,在标准电脑上都需要一段时间。

【讨论】:

    【解决方案2】:

    类似:

    struct A {
       std::vector <int> v;
       A() : v(100000) {}
    };
    

    可能是你想要的。当你说:

    A a;
    

    这将创建一个包含所需大小的向量的结构 A 实例(也适用于类)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-05
      • 2020-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-07
      • 1970-01-01
      • 2020-01-26
      相关资源
      最近更新 更多