【问题标题】:How to initialize STL vector of pointers from array如何从数组初始化指针的 STL 向量
【发布时间】:2018-09-22 19:31:39
【问题描述】:

我需要从数组 double* 中初始化一个 std::vector。这是当前代码:

class MyClass {
...
    std::vector<double*> myVector;

    void MyClass(double* vectorData, size_t dataCount) {
        myVector(dataCount, NULL);
        for (unsigned int ii = 0; ii < dataCount; ++ii) {
            myVector.push_back(vectorData + ii );
        }
        ...
    }     
...
}

我想知道是否有一种好方法可以用矢量构造函数或 myVector.fillWithPointers(myData, dataCount) 之类的调用替换 for 循环。

我知道我可以编写自己的函数来执行此操作,但我想知道是否有内置方法可以执行此操作。是的,我在这里省略了异常处理和数据检查以提高可读性。

【问题讨论】:

  • myVector.resize(dataCount); std::iota(myVector.begin(), myVector.end(), vectorData);.
  • 另外,构造函数必须没有返回类型。此外,myVector(dataCount, NULL) 不是有效的代码。

标签: c++ arrays pointers vector


【解决方案1】:

您可能想要这个(修复代码中的所有其他编译问题):

#include <numeric>
#include <vector>
#include <iostream>

class MyClass {
  std::vector<double*> myVector;

public:
  MyClass(double* vectorData, size_t dataCount)
    : myVector(dataCount)
  {
    std::iota(myVector.begin(), myVector.end(), vectorData);
  }

  void DebugShowVectors()
  {
    for (double *d : myVector)
      std::cout << *d << "\n";
  }
};

int main()
{
  double data[] = { 1.1, 2.2, 3.3 };    
  MyClass instance(data, sizeof(data) / sizeof(data[0]));
  instance.DebugShowVectors();
}

但我不确定首先将指向doubles 的指针而不是doubles 本身存储在向量中是否真的是一个好主意。

【讨论】:

  • @HolyBlackCat 那肯定更好
  • 由于问题范围之外的原因需要使用指针,但我不知道 iota() 函数,它给了我想要的东西。谢谢!
猜你喜欢
  • 2010-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-08
  • 2015-04-28
  • 2016-08-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多