我有一个函数从另一个类接收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时间,那么效果会更好吗?什么是资源消耗的差异?
答案 0 :(得分:0)
如果get_Board()
必须返回副本,请在循环之前复制(而不是26 * 59份),并直接使用在上面。它也会避免你board->
间接。
如果可能,请从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 << ' ';
}
答案 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()都会返回一个矢量向量数组,这会影响性能,而调用它会更便宜。