我目前正在编写模板矩阵。
它包含一个名为mat的vector<vector<T>>
和包含行数和列数的cols和rows vals。
我试图构建一个迭代器,并发现我无法为vector向量构建迭代器函数。由于我的其余代码已经编写,我添加了一个matrixToVector函数,将我的vector<vector<T>>
转换为vector<T>
(我知道这不是最好的选择,但它只适合大学练习)。
在我的Windows笔记本电脑上很好,但在Linux计算机实验室中,前两个迭代器的数量总是一个非常大的随机数,然后是0,然后其余的数字都很好。
这是代码:
/**
* turns the 2d mat vecor to 1d vector.
*/
vector<T> matrixToVector()
{
vector<T> v;
for(unsigned int i = 0 ; i < rowsNum; i++)
{
for(unsigned int j = 0; j < colsNum; j++)
{
v.push_back(mat[i][j]);
}
}
return v;
}
/**
* iterator
*/
typedef typename std::vector<T>::const_iterator const_iterator;
/**
* return the end of the iterator.
*/
const_iterator end()
{
return matrixToVector().end();
}
/**
* return the begining of the iterator.
*/
const_iterator begin()
{
return matrixToVector().begin();
}
我不知道什么是错的。 我该怎么办?
编辑: 当我使用常规打印功能打印矩阵时,它在Linux和Windows上运行良好。
答案 0 :(得分:7)
const_iterator begin()
{
return matrixToVector().begin();
}
返回对堆栈上对象的引用,matrixToVector()
创建临时对象的结果,从begin
返回后将被销毁