【发布时间】:2011-01-11 23:50:21
【问题描述】:
这个函数我写了
vector<long int>* randIntSequence(long int n) {
vector<long int> *buffer = new vector<long int>(n, 0);
for(long int i = 0; i < n; i++)
buffer->at(i);
long int j; MTRand myrand;
for(long int i = buffer->size() - 1; i >= 1; i--) {
j = myrand.randInt(i);
swap(buffer[i], buffer[j]);
}
return buffer;
}
但是当我从 main 调用它时,myvec = randIntSequence(10),我看到 myvector 总是空的。要不要修改返回值?
【问题讨论】:
-
不应该用
new分配标准容器——这有点不妥!此外,您的第一个for循环是无操作的。 -
这种设计看起来很可疑。为什么要动态分配
vector?您不只是在堆栈上创建它并返回它有什么特别的原因吗?随机数生成器可以抛出异常吗?您是否考虑过使用智能指针? -
是的,我忘记将 i 分配给缓冲区的第 i 个元素。我没有指针的问题是:如果我想在函数之外的某个时刻删除向量,它会被完全删除吗?
-
听起来你应该改用
std::random_shuffle。 -
你需要在向量上推一些东西,使用
push_back。