我陷入了很多问题,试图将值存储在2D向量中。 所以我写了这个简单的代码。
我只是存储和打印我的值:
ArrayList<HomeModel> models = hashmap.get("coffee");
答案 0 :(得分:1)
首先,您应该阅读Why is “using namespace std;” considered bad practice?。
在使用变量时而不是在程序开始时声明变量。
向量vec
开头是空的。在循环中
for(i=0;i<(rs/2);i++)
{
vec[i].push_back(row.at(i));
vec[i].push_back(row.at(i+4));
}
您正在使用
引用vec
中的第i个元素
vec[i]
,但此元素不存在。这是未定义的行为,可能会导致分段错误。您可以通过使用所需元素构建向量来修复它
#include <iostream>
#include <vector>
int main()
{
std::vector<int> row{1,3,5,7,9,12,34,56};
int rs = row.size();
std::vector<std::vector<int>> vec(rs / 2);
std::cout << "rs = " << rs << '\n';
for(int i = 0; i < rs / 2; ++i)
{
vec[i].push_back(row.at(i));
vec[i].push_back(row.at(i + 4));
}
int vs = vec.size();
std::cout << vs << '\n';
for(int n = 0; n < vs; ++n)
{
for(int m = 0; m < 2; ++m)
{
std::cout << vec[n][m] << " ";
}
std::cout << '\n';
}
return 0;
}
在此示例中,该行
std::vector<std::vector<int>> vec(rs / 2);
构造一个包含rs / 2
默认构造元素的向量。或者,您可以从空向量开始,然后将元素推回循环
#include <iostream>
#include <vector>
int main()
{
std::vector<int> row{1,3,5,7,9,12,34,56};
int rs=row.size();
std::vector<std::vector<int>> vec;
std::cout << "rs = " << rs << '\n';
for(int i = 0; i < rs / 2; ++i)
{
vec.push_back({row.at(i), row.at(i+4)});
//
// is similar to:
// vec.push_back({});
// vec.back().push_back(row.at(i));
// vec.back().push_back(row.at(i+4));
//
// is similar to:
// vec.push_back({});
// vec[i].push_back(row.at(i));
// vec[i].push_back(row.at(i+4));
}
int vs = vec.size();
std::cout << vs << '\n';
for(int n = 0; n < vs; ++n)
{
for(int m = 0; m < 2; ++m)
{
std::cout << vec[n][m] << " ";
}
std::cout << '\n';
}
return 0;
}
我建议第一个解决方案。最好为所有元素分配内存并使用它,而不是在每次循环迭代中分配内存。