通过指针填充带有自定义类的向量 - 构造函数的问题

时间:2012-10-27 17:27:27

标签: c++ vector constructor lambda iterator

我对以下内容感兴趣:

  • 拥有指向用户定义类型/类
  • 的std :: vector指针
  • 以最快的方式填写此向量

我想用以下方法解决这个问题:

  • while + iterators(非C ++ 11解决方案)
  • for_each iteration + 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);
}

我知道这是微不足道的,但对我来说并非如此,根据我的理解,它是一个指针,需要被指向它指向矢量的真实值;很明显,这个概念并不是这样的。

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

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

此外,当我需要在整个地方执行相同的操作时,有一种更快的方法来循环整个矢量,而不使用whilefor_each或{{{{}}的迭代方法1}}。

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

感谢。

1 个答案:

答案 0 :(得分:3)

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