我怎么能给c++ vector赋值

How could I assign values to c++ vector

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

vector<int> v{1,3,4,6};

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

class C {
  public: 
    vector<int> v; 
    C();
};

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

C::C() {
    v.resize(4); 
    v[0]=1; 
    v[1]=3; 
    v[2]=4; 
    v[3]=6;
}

怎样才能像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;...}。因此我必须处理其他一些事情才能知道如何初始化这个向量,所以我不能按照某些答案中的建议使用初始化列表。有什么建议吗?

以下方法可行:

C::C()
    : v{ 1, 3, 4, 6 }
{}

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

你可以像

这样在成员初始化器列表中初始化它
class C{
public: 
    vector<int> v; 
    C() : v {1,3,4,6} {}
};

或使用 default member initializer (C++11 起) 如

class C{
public: 
    vector<int> v {1,3,4,6};
    C() {}
};

您可以为构造函数使用初始化列表。

关于根据您编辑的问题进行条件初始化,只需将矢量内容初始化为 0,然后应用您需要的任何条件并相应地初始化特定值:

class C 
{
  public:
    vector<int> v;
    C() : v{0,0,0,0}
    {   if(v.size()==4) // your condition
          v[0]=1;
    }
};

这应该有效:

#include <vector>
class C {
   std::vector<int> v;
public :
   C() {
      if(...)
         v = { 0, 1, 2, 3, 4 };
      else
         v = { 5, 6, 7, 8, 9, 10, 11, 12};
      //and other statement
   }
};