关于指向stl的指针的新手问题

Bob*_*Bob 1 c++ pointers stl vector

我写过这个函数

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;
}
Run Code Online (Sandbox Code Playgroud)

但是当我从main调用它时,myvec = randIntSequence(10),我看到myvector总是空的.我要修改返回值吗?

Joh*_*ica 5

swap调用将*buffer指针索引为好像它是一个数组并且在指针之间交换.你的意思是交换向量的项目.试试这个修改:

swap((*buffer)[i], (*buffer)[j]);
Run Code Online (Sandbox Code Playgroud)

除此之外,您的at呼叫不会按预期设置值.您正在拉出矢量中的项目,但没有将它们设置为任何内容.尝试以下陈述之一:

buffer->at(i) = i;
(*buffer)[i] = i;
Run Code Online (Sandbox Code Playgroud)

  • 哦; 接得好.动态分配容器FTL. (2认同)