Я в настоящее время программирую матрицу шаблонов. Он содержит vector<vector<T>>
под названием mat и cols и rows vals, которые содержат количество строк и столбцов. Я попытался построить итератор и выяснил, что я не могу построить итераторную функцию для вектора вектора. так как остальная часть моего кода уже была написана, я добавил функцию matrixToVector, которая превращает мой vector<vector<T>>
в vector<T>
(я знаю, что это не лучший вариант, но это просто упражнение в колледже). На моем ноутбуке Windows отлично работает в туннелях, но в компьютерных лабораториях Linux первые два номера итератора всегда являются очень большим случайным числом, а затем 0, а затем остальные номера в порядке. Вот код:Итератор, который работает на окнах, но не на linux
/**
* 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();
}
Я понятия не имею, что это неправильно. Что мне делать?
EDIT: Когда я печатаю матрицу с обычной функцией печати, она отлично работает на Linux и Windows.
Вы неопределенное поведение. Вектор, создаваемый 'matrixToVector', выходит за пределы области видимости, и итератор, который возвращает' begin', будет указывать на разрушенный объект. –
Печать @lurker с обычной функцией печати, которая печатает матрицу, отлично работает и с linux. – COOKIE
@SimonGibbons в этом случае, почему я успешно распечатываю весь контент матрицы, за исключением первых двух элементов? – COOKIE