为什么我不能将int写入vector

时间:2015-04-19 09:13:31

标签: c++ vector

我的意见是:

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);
      ~~~~~~~~^~~~~~~~~~

我不明白它为什么会发生?

3 个答案:

答案 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 );
    }
}