3

假设我有一个结构,其成员是一个向量。在构造函数中,我只想将其设置为 NULL。但后来我希望能够 push_back 给它。向量为 NULL 后如何初始化它?

struct structName {
    vector<int> vec;
    structName() {
        vec = NULL
    }
    void set(int);
}

void structName::set(int n) {
    // What do I put here?
    vec.push_back(n);
}

谢谢您的帮助!

4

4 回答 4

3

它已经通过默认构造函数初始化,如果您需要调用不同的构造函数,请使用初始化列表。

请记住,这是 C++,而不是 Java/C#/其他。对象为空是没有意义的(好吧,这些语言也没有,但请继续阅读)。这不可能发生。在 Java 和类似的语言中,您有变量是对对象的引用,而这些引用(不是对象!)可能为空,也可能不为空。

在 C++ 中情况并非如此。对象和引用它们的指针之间有严格的划分(指针,或者当然,可以为空或引用无效的内存位置)。

于 2012-10-31T22:45:03.267 回答
0

向量的默认构造函数会将其设置为最简单的状态:无内容。所以别管它。

于 2012-10-31T22:43:29.007 回答
0

将向量初始化为 NULL 没有任何意义。也许你对指针感到困惑。如果你想将你的向量初始化为空向量,那么这会自动发生。换句话说就是这样

struct structName {
    vector<int> vec;
    structName() {
    }
    void set(int);
}

void structName::set(int n) {
    vec.push_back(n);
}
于 2012-10-31T22:44:38.387 回答
0

我认为您会像在 Java 中一样考虑 C++ 对象。不要他们是完全不同的野兽。

在 C++ 中,对象不是 Java 中的引用,因此,将它们归零没有意义。事实上,尝试vec = NULL是一个错误,NULL实际上只是 0。

相反,只需删除该行vec = NULL,它就会按原样工作。该向量将默认构造为空,您无需进行任何其他初始化。

于 2012-10-31T22:45:40.227 回答