向量声明

Dav*_*del 0 c++ vector

向量大小是动态的,所以为什么这会给出一个seg错误:

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(){
    vector<int> vectorOfInts;

    vectorOfInts[0] = 3;
}
Run Code Online (Sandbox Code Playgroud)

我正在尝试实际做的是在类中声明一个向量.

#include <iostream>
#include <string>
#include <vector>

using namespace std;

class Directory{
    public:
        string name;
        int maxIndex;
        vector<Directory> subDirectories;

        void addSubdirectory(string x){
            Directory newSubdirectory(x);
            subDirectories[maxIndex++] = newSubdirectory;
        }

        Directory(string x){
            name = x;
            maxIndex = 0;
        }
};

int main(){
    Directory root("root");
    root.addSubdirectory("games");
}
Run Code Online (Sandbox Code Playgroud)

但这也给出了一个段错误.

Jer*_*fin 5

矢量不会完全自动调整大小.您在运行时使用push_backresize更改向量的大小,但向量不会根据您使用的索引自动调整大小 - 如果索引超出其当前大小,则会得到未定义的行为.

在您的演示代码中,您可以执行以下操作:

vector<int> vectorOfInts(1);

vectorOfInts[0] = 3;
Run Code Online (Sandbox Code Playgroud)

或者,由于您只是添加3到现有数据的末尾(或者在这种情况下不存在的数据),您可以使用push_back(或emplace_back):

vector<int> vectorOfInts;
vectorOfInts.push_back(3);
Run Code Online (Sandbox Code Playgroud)

看起来相同的基本方法也适用于您的实际代码.它还简化了一些事情,因为你不需要像你那样明确地跟踪maxIndex.