打印 2D 数组矢量的最佳方法是什么

What is the optimal way of printing a 2d array vector

本文关键字:最佳 方法 是什么 2D 数组 打印      更新时间:2023-10-16

>我有一个函数,它从另一个类接收字符的 2D 向量并打印出来

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 时间哪个更好? 资源消耗有什么区别?

  • 如果get_Board()必须返回副本,请在循环之前制作单个副本(而不是 26 * 59 个副本(,并直接对其进行处理。它还将避免您board->间接

  • 如果可能,请返回 const 引用,而不是从 get_Board() 返回副本

  • 假设您要打印整个电路板,不要使用嵌套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 << ' ';
}
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(( 时,您都会返回一个向量向量数组,这会影响性能,而调用一次会更便宜。