如何将元素添加到嵌套向量中

时间:2015-10-13 13:59:58

标签: c++ vector

对不起这个愚蠢的问题,我很抱歉,但我是c ++的初学者。由于英语不好,我无法很好地描述问题。我将在这里添加我迄今为止尝试过的代码。

 vector< vector<string> >allData;

 int main(){
    vector<string>test;        
    for(int i = 0; i<allData.size(); i++){
        test = allData[i];
    }
    int id;
    cout<<"enter Id"<<endl;
    cin>>id;
    if (id == test[2]){
        string desc;
        cout<<"enter ur description"<<endl;
        cin>>description;
        allData.push_back(description);
    } else {
        cout<<"there is no data with the id u have entered"<<endl;
    }
 }

上面的代码只是一个示例代码。让我们说在矢量中有2个矢量名为allData,所以当我输入第一个矢量的ID时,我可以通过选择它的Id来将描述添加到我选择的矢量中。不知怎的,我不能做那样的事情,比如通过输入他们的ID选择第一个或第二个向量然后在选择的1中添加更多的数据。所以请有人告诉我该怎么办。我知道上面的代码是不完整和糟糕的,但正如我之前所说的,我在c ++中非常初学

3 个答案:

答案 0 :(得分:0)

好吧,如果你需要直接访问你的子矢量,你需要声明你的vector说明它有多少个子矢量(没有这个,你在尝试访问它时会出现分段错误,即。{{1将被统一化)。

我们假设您有2个,所以它们将是allData[0]allData[0],就像普通数组一样。

allData[1]

当然,您也可以通过动态添加矢量。

std::vector<std::vector<std::string>> allData (2);

allData[0].push_back("string0a");
allData[0].push_back("string0b");
allData[1].push_back("string1");

for(auto & a : allData[0])
    std::cout << a << "\n";

要检查用户输入的id是否有效,您可以执行

std::vector<std::vector<std::string>> allData;
std::vector<std::string> child0;
child0.push_back("string0");
allData.push_back(child0);

答案 1 :(得分:0)

您可以像嵌入法向量一样将值添加到嵌套向量中。因此,您可以allData[i].push_back(description)甚至allData[i][j] = description覆盖现有值。但是,您尝试将字符串推入allData,其中不包含字符串,而是字符串的向量。

此外,您的第一个for循环会一直运行allData并将每个保存到test,每次都会覆盖test。循环完成后,测试将只包含allData的最后一个元素。因此,你的for循环相当于执行test = allData.back()

答案 2 :(得分:0)

您的变量all_data是代表行和列的向量的向量。您可以为一行创建一个刮擦矢量,在该刮擦矢量上创建push_back()数据,然后将这种刮擦矢量push_back()放在all_data上,如下所示:

#include <vector>

int main() {
   std::vector<std::vector<int>> all_data;
   for (int ii = 0; ii < 10; ii++) {
      std::vector<int> row_data;
      for (int jj = 0; jj < 10; jj++) {
         row_data.push_back(ii * jj);
      }
      all_data.push_back(row_data);
   }
   return (0);
}