c++ - 在 C++11 中初始化 vector 的 vector

标签 c++ c++11 vector

<分区>

我正在尝试创建一个 2D vector ,如下所示:

//create vector of vectors with 7 elements and 4 fields
vector<vector<string>> trainingData(4, vector<string>(7));
vector<string> age;
vector<string> has_job;
vector<string> own_house;
vector<string> credit_rating;

age = {"young", "young", "middle", "middle", "middle", "old", "old"};
has_job = {"no", "no", "no", "no", "yes", "no", "no"};
own_house = {"no", "no", "no", "no", "yes", "yes", "yes"};
credit_rating = {"fair", "good", "fair", "good", "good", "excellent", "good"};

trainingData = {age, has_job, own_house, credit_rating};

这样初始化对吗?我可以根据字段名称列出数据,但我不能删除 vector (例如,通过调用 trainingData.erase(trainingData.begin()+1) 来删除 has_job vector )

最佳答案

我同意 Kerrek SB 的回答,它解决了手头的问题。我认为您可能想更进一步,制作结构的 training_data 变量 vector ,而不是字符串 vector 的 vector 。

enum class CreditRating { FAIR, GOOD, EXCELLENT };
enum class Age { YOUNG, MIDDLE, OLD };

// Make plain-old-data, so that you can initialize using aggregate initialization
struct Applicant 
{
  Age age;
  bool has_job;
  bool owns_house;
  CreditRating credit_rating;
};

const std::vector<Applicant> training_data{
        { Age::YOUNG, false, false, CreditRating::FAIR },
        { Age::YOUNG, false, false, CreditRating::GOOD },
        // [...]
        {   Age::OLD, false,  true, CreditRating::GOOD } };

// Use training_data

关于c++ - 在 C++11 中初始化 vector 的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24599848/

相关文章:

c# - VS15打不开反汇编窗口

c++ - 如何等待超时值

c++ - 从子类的STL vector 到基类 vector 的转换

c++ - 同一类不同方法中指针的 vector

c++ - 不可调整大小的 vector/不可重新分配但可变成员的数组?

c++ - Windows 线程创建期间的内存管理

c++ - 在 C++ 中录制时从设备获取音量

c++ - 混淆条件的评估和 for 循环的步骤

c++ - 调用模板提供的(静态)函数

c++ - std::result_of 和 decltype 之间的区别