sar*_*aru 4 c++ vector multidimensional-array
我有一个向量,并希望在运行时将int数据存储到它中,我可以用这种方式将数据存储在2D向量中吗?
std::vector<std::vector <int>> normal:
for(i=0;i<10;i++){
for(j=0;j<20;j++){
normal[i].push_back(j);
}
}
Run Code Online (Sandbox Code Playgroud)
是的,但您还需要推送每个子向量:
std::vector<std::vector<int>> normal;
for(int i=0; i<10; i++)
{
normal.push_back(std::vector<int>());
for(int j=0; j<20; j++)
{
normal[i].push_back(j);
}
}
Run Code Online (Sandbox Code Playgroud)
您正在操纵向量的向量。因此,在声明时normal它为空并且不包含任何元素时。
你可以:
std::vector<std::vector<int> > normal;
normal.resize(20);
for (size_t i = 0; i < normal.size(); ++i)
{
for (size_t j = 0; j < 20; ++j)
normal[i].push_back(j);
}
Run Code Online (Sandbox Code Playgroud)
这可能比在其他答案中提出的在每一步推送一个空向量更有效。
如果要存储二维数组,这不是最佳解决方案,因为:
normal[i].size() == normal[j].size()相反,您可以使用大小向量N * M(其中N是行M数和列数),并使用索引访问行i和列处的元素:ji + j * N
size_t N = 20;
size_t M = 20;
std::vector<int> normal;
normal.resize(N * M);
for (size_t i = 0; i < N; ++i)
for (size_t j = 0; j < M; ++j)
normal[i + j * N] = j;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25529 次 |
| 最近记录: |