打印二维数组矢量的最佳方法是什么?

时间:2014-08-16 20:00:46

标签: c++ vector

我有一个函数从另一个类接收char的二维矢量并打印它

void dat_Output::print_All(Board *board)
{
  int x;
  int y;

  x = 0;
  y = 0;                                    
  while(x < 26)
    {
      while(y < 59)
        {
          std::cout << board->get_Board()[x][y];
          y++;
        }
      std::cout << std::endl;
      y = 0;
      x++;
    }
}

这是get_Board()函数

std::vector<std::vector<char> > Board::get_Board()
{
  return(board);
}

我的问题是资源效率,如果我在打印功能开始时复制矢量以避免调用get_Board()26 * 59时间,那么效果会更好吗?什么是资源消耗的差异?

2 个答案:

答案 0 :(得分:0)

  • 如果get_Board() 必须返回副本,请在循环之前复制(而不是26 * 59份),并直接使用在上面。它也会避免你board->间接。

  • 如果可能,请从get_Board()

  • 返回const引用而不是副本
  • 假设您要打印整个电路板,请不要使用嵌套的while循环,您可以使用嵌套的for-range循环并避免显式索引。

最小例子:

#include <iostream>
#include <vector>

class X
{
    public :
        X() : v({ { 'a', 'b'} ,  { 'a', 'b' } , { 'c', 'd' } }) {}

    const std::vector<std::vector<char>> & GetVector() const { return v; }

    private:
        std::vector<std::vector<char> > v;
};


int main() {
    X x;

    const std::vector<std::vector<char> >& v = x.GetVector();

    for(auto& v2 : v)
      for(auto& c : v2)
        std::cout << c << ' ';
}

答案 1 :(得分:0)

void dat_Output::print_All(Board *board)
{
  std::vector<std::vector<char> > myboard = board->get_Board()[x][y];   
  int x;
  int y;

  x = 0;
  y = 0;                                    
  while(x < 26)
    {
      while(y < 59)
        {
          std::cout << myboard[x][y]; 
          y++;
        }
      std::cout << std::endl;
      y = 0;
      x++;
    }
}

我最初会创建一个副本。我想每次调用get_Board()都会返回一个矢量向量数组,这会影响性能,而调用它会更便宜。