对不起这个愚蠢的问题,我很抱歉,但我是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 ++中非常初学
答案 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);
}