c++ - 通过指针用自定义类填充 vector - 构造函数有问题

标签 c++ vector constructor lambda iterator

我感兴趣的是:

  • 具有指向用户定义类型/类的指针的 std::vector
  • 以最快的方式填充这个 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);
}

我知道这是微不足道的,但对我来说不是,在我的理解中,它是一个指针,需要间接指向它在 vector 中指向的实际值;显然,这个概念并不适用。

对于 lambda 和 for_each,我只是不知道如何为自定义类使用构造函数,因为文档只讨论通用方法和函数,而且我似乎无法使用构造函数。

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

此外,当我需要在所有地方执行相同的操作而不使用 while 的迭代方法时,有一种循环整个 vector 的更快的方法。和 for_eachfor .

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

谢谢。

最佳答案

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

关于c++ - 通过指针用自定义类填充 vector - 构造函数有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13102445/

相关文章:

c++ - c++ vector<vector<int>> 如何管理内存

python - 将字典传递给构造函数?

c++ - 构造函数中冒号后的变量

c++ - 如何获取实例的所有 `this` 数组

c++ - 商业产品的Qt许可证

c++ - [性能]--- string::operator+= vs. vector<char> push_back

c++ - 调整类中二维 vector 的大小

c++ - 使用类型推断声明变量是否与在变量名后用括号初始化变量的 "classical way"一样有效?

c++ - 自动裁剪图像的特定部分

c++ - 对 boost 库的依赖没有完整路径