我需要从数组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循环。
我知道我可以编写自己的函数来执行此操作,但我想知道是否有内置的方法来执行此操作。是的,我在这里省略了异常处理和数据检查的可读性。
答案 0 :(得分:2)
您可能想要这个(修复代码中的所有其他编译问题):
#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();
}
但是我不确定在向量中存储指向double
的指针而不是double
本身的指针确实是一个好主意。