我如何为 c++ 向量赋值

coi*_*ung 1 c++ vector stdvector c++11

我知道我可以像这样初始化一个向量:

vector<int> v{1,3,4,6};
Run Code Online (Sandbox Code Playgroud)

但是,当我定义一个包含向量的类时,我无法在我声明它的位置初始化它,如下所示:

class C {
  public: 
    vector<int> v; 
    C();
};
Run Code Online (Sandbox Code Playgroud)

因此我需要在构造函数中初始化它。以下代码有效,但不干净:

C::C() {
    v.resize(4); 
    v[0]=1; 
    v[1]=3; 
    v[2]=4; 
    v[3]=6;
}
Run Code Online (Sandbox Code Playgroud)

我怎么能像初始化一样整齐直接地初始化它,vector<int> v{1,3,4,6};而不是一个一个地赋值?

编辑:也许我没有把我的情况说清楚。{1,3,4 6} 的值可能不是预定义的值,它们取决于一些逻辑和条件:if(condition_a) {v[0] = 0; v[1]=3; ...} else {v[0]=4;v[0]=8;...}. 因此,我必须处理其他一些事情才能知道如何初始化这个向量,所以我不能按照某些答案中的建议使用初始化列表。请问有什么建议吗?

Nut*_*ker 7

以下将起作用:

C::C()
    : v{ 1, 3, 4, 6 }
{}
Run Code Online (Sandbox Code Playgroud)

请注意,在上面的代码中,您将 传递std::initializer_liststd::vector的构造函数。


son*_*yao 5

您可以在成员初始值设定项列表中对其进行初始化,例如

class C{
public: 
    vector<int> v; 
    C() : v {1,3,4,6} {}
};
Run Code Online (Sandbox Code Playgroud)

或者使用默认成员初始值设定项(C++11 起),如

class C{
public: 
    vector<int> v {1,3,4,6};
    C() {}
};
Run Code Online (Sandbox Code Playgroud)