Как я могу назначить значения для вектора C ++ - PullRequest
0 голосов
/ 08 апреля 2020

Я знаю, что могу инициализировать вектор следующим образом:

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

Однако, когда я определяю класс, содержащий вектор, я не могу инициализировать его в позиции, в которой я его объявляю, вот так:

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} не может быть предопределенным значением, оно будет зависеть от некоторых лог c и условий: if(condition_a) {v[0] = 0; v[1]=3; ...} else {v[0]=4;v[0]=8;...}. Поэтому мне приходится иметь дело с некоторыми другими вещами, чтобы знать, как инициализировать этот вектор, поэтому я не могу использовать список инициализации, как предлагается в некоторых ответах. Любой совет, пожалуйста?

Ответы [ 4 ]

7 голосов
/ 08 апреля 2020

Будет работать следующее:

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

Обратите внимание , что в приведенном выше коде вы передаете std::initializer_list в конструктор std::vector.

5 голосов
/ 08 апреля 2020

Вы можете инициализировать его в списке инициализаторов элементов, например

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

Или использовать инициализатор элементов по умолчанию (начиная с C ++ 11), например

class C{
public: 
    vector<int> v {1,3,4,6};
    C() {}
};
1 голос
/ 08 апреля 2020

Вы можете использовать список инициализатора для конструктора.

Относительно условной инициализации согласно вашему отредактированному вопросу, просто инициализируйте векторное содержимое равным 0, а затем примените все необходимые условия и инициализируйте указанные c значения соответственно:

class C 
{
  public:
    vector<int> v;
    C() : v{0,0,0,0}
    {   if(v.size()==4) // your condition
          v[0]=1;
    }
};
0 голосов
/ 08 апреля 2020

Это должно работать:

#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
   }
};
...