Поскольку вопрос касается STL, и все, что вам нужно, это вектор со случайными записями, то:
std::vector<long int> v(10);
generate( v.begin(), v.end(), std::rand ); // range is [0,RAND_MAX]
// or if you provide long int MTRand::operator()()
generate( v.begin(), v.end(), MTRand() );
Но если вы хотите исправить свою функцию, тогда
n
должно быть size_t
не long int
- Первый цикл не работает
- Как говорит Джон,
buffer
- это указатель, поэтому buffer[0]
- это ваш вектор, а buffer[i]
для i!=0
- это мусор. Кажется, вам очень повезло получить вектор нулевого размера вместо поврежденного!
- Вы намерены сделать случайное перемешивание? Если да, то вы тасуете нули. Если вы просто хотите сгенерировать случайные записи, то почему бы вам просто не зациклить вектор (от 0 до buffer-> size (), а не наоборот !!) и назначить ваше случайное число?
C ++ не является сборщиком мусора, и вам, вероятно, не нужны умные указатели для таких простых вещей, поэтому вы обязательно получите утечки. Если причина заключается в генерации вектора кучи и возврате по указателю, что позволяет избежать копирования из-за производительности, то я советую не делать этого! Ниже приведена (почти) идеальная альтернатива, как для ясности, так и для производительности:
vector<T> randIntSequence( size_t n ) {
vector<T> buffer(n);
// bla-bla
return buffer;
}
Если вы считаете, что здесь происходит избыточное копирование, прочитайте this и доверьтесь своему компилятору.