0

我感兴趣的是:

  • 具有指向用户定义类型/类的指针的 std::vector
  • 以最快的方式填充这个向量

我想解决这个问题:

  • while + 迭代器(非 C++11 解决方案)
  • for_each 迭代 + lambda(c++11 解决方案)

现在,在阅读了文档后,我正在尝试iterator使用while

#include <iostream>
#include <vector>

class A{
  public:
    A(){}
    ~A(){}
  private:
    int n;
    double d;
    float f;
    std::string s;
};

int main(){
  std::vector<A*> v(100); // fixed *A to A*
  std::vector<A*>::iterator iter = v.begin(); // fixed *A to A*
  while( iter != v.end() )
  {
    *iter = new A(); // iter = A(); by the way this does not works either // now fixed using new
    ++iter;
  }
  return(0);
}

我知道这是微不足道的,但对我来说不是,在我的理解中 iter 它是一个指针,需要间接指向它在向量中指向的实际值;显然,这个概念不能这样工作。

使用 lambda 和 for_each 我只是不知道如何为自定义定义的类使用构造函数,因为文档只讨论泛型方法和函数,并且似乎我不能使用构造函数。

我如何使用迭代器和 lambdas 构建对象?

此外,当我需要在整个地方执行相同的操作时,有一种更快的方法来循环整个向量,而无需使用带有whilefor_each或 的迭代方法for

我想避免复制构造函数开销,所以我想使用指针保留所有可能的解决方案。

谢谢。

4

1 回答 1

3

首先,您应该使用A*而不是*A在 C++ 中创建指针,其次您不能设置指向在堆栈中创建的实例的指针,A()而是应该在堆上创建值或使用堆栈中变量的地址,所以您应该有*iter = new A()

于 2012-10-27T17:30:38.060 回答