向量大小是动态的,所以为什么这会给出一个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)
但这也给出了一个段错误.
矢量不会完全自动调整大小.您在运行时使用push_back或resize更改向量的大小,但向量不会根据您使用的索引自动调整大小 - 如果索引超出其当前大小,则会得到未定义的行为.
在您的演示代码中,您可以执行以下操作:
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.