我的意见是:
4 4
4 8 7 3
2 5 9 3
6 3 2 5
4 4 1 6
程序是:
#include <iostream>
#include <vector>
int main () {
int rows, columns;
std::cin >> rows >> columns;
std::vector<int> map(rows);
int cell;
for (int row = 0; row < rows; ++row) {
for (int column = 0; column < columns; ++column) {
std::cin >> cell;
map[row].push_back(cell);
}
}
}
当我尝试编译程序时,我收到了一条错误消息:
app.cpp:16:15: error: member reference base type 'value_type' (aka 'int')
is not a structure or union
map[row].push_back(cell);
~~~~~~~~^~~~~~~~~~
我不明白它为什么会发生?
答案 0 :(得分:2)
将std::vector<int> map(rows);
替换为
std::vector< std::vector<int> > map(rows);
std::vector<int> map(rows);
:地图是一个包含rows
元素且map[row]
类型为int
的向量,因此您无法将push_back
应用于该数据。
std::vector< std::vector<int> > map(rows);
:地图是包含rows
元素且map[row]
类型为vector<int>
的向量的向量,您可以将push_back
应用于它。
答案 1 :(得分:2)
在这一行
std::vector<int> map(rows);
您声明具有长度行的整数的向量。据我所知,你需要一个矢量矢量。可能你需要像
这样的东西 int rows, columns;
std::cin >> rows >> columns;
std::vector<std::vector<int>> map(rows);
int cell;
for (int row = 0; row < rows; ++row) {
map[row].resize(columns);
for (int column = 0; column < columns; ++column) {
std::cin >> cell;
map[row][column] = cell;
}
}
答案 2 :(得分:1)
事实上,你将拥有一张二维表。但是,您只定义了一个“行”:
std::vector<int> map(rows);
这是一个整数序列的向量。
你必须定义一个整数向量的向量。
代码可以采用以下方式
#include <ostream>
#include <vector>
int main ()
{
int rows, columns;
std::cin >> rows >> columns;
std::vector<std::vector<int>> map;
map.reserve( rows );
for ( int row = 0; row < rows; ++row )
{
std::vector<int> tmp;
tmp.reserve( columns );
for ( int column = 0; column < columns; ++column )
{
int cell;
std::cin >> cell;
tmp.push_back( cell );
}
map.push_back( tmp );
}
}