У меня есть шаблон функции, который предполагает взять вектор и создать в нем случайные числа. Однако, когда я печатаю весь вектор, все его нули. Однако этот метод работает для массивов.
код:
#include <vector>
template<class T>
class RandomGenerator
{
public:
// function template for generating random numbers
void genRand(T data[], int size)
{
for (int i = 0; i < size; i++)
{
data[i] = (1 + rand() % size);
}
}
void genRand(std::vector<T> data, int size)
{
genRand(&data[0], size);
}
};
Вы берете вектор по значению, поэтому аргумент не будет изменен. Возьмите это по ссылке:
void genRand(std::vector<T>& data, int size)
// ^
&data[0]
не приводит к типуT*
что означает, что память не выделяется автоматически вvector<T>
при выполненииdata[i] = value
- так что я бы ожидал обрезания памяти здесь из-за написания за пределами границы.