这可能是一个简单的问题,但是,它给我带来了很多困惑。
我有一个返回填充向量的类成员:
vector<double> returnVector()
{
return theVector;
}
我还有一个被称为toArray()
接受 Iterator 的函数,以便我可以在传入的值的类型之间交替。例如:
template<typename T, typename Inverse>
T* toArray(Inverse begin, Inverse end)
{
size_t size = distance(begin, end);
auto pos = 0;
T* tmp = new T[size];
for(auto i = begin; i != end; i++)
{
tmp[pos] = *i;
pos++;
}
return tmp;
}
在我的主要内容中,我认为可以执行以下操作;
MyClass class;
auto* var = Functs::toArray<double>(
std::begin(class.returnVector()),
std::end(class.returnVector())
);
但是,这不起作用,我似乎遇到了一些 malloc 错误。但是,我可以执行以下操作:
MyClass class;
vector<double> vals = class.returnVector();
auto* var = Functs::toArray<double>(
std::begin(vals),
std::end(vals)
);
谁能解释为什么会这样?我假设因为函数returnVector
返回实际向量,因此可以访问 from begin
to end
?