我有一對嵌套的 for 回圈,我正在嘗試列印以下結構:
0 1 2 3 4
0 - - - - -
1 - - - - -
2 - - - - -
3 - - - - -
4 - - - - -
如果我嘗試將外回圈的行計數器初始化為 -1,并使用 .length() 將其與向量的長度進行比較,則外回圈根本不會運行。我已經通過將列印陳述句放在外回圈中來對此進行了測驗,并且它們永遠不會被執行。我的編譯器還發出以下警告:warning: comparison of integer expressions of different signedness: ‘int’ and ‘std::vector<std::vector<char> >::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
我試圖將行計數器從 int 更改為 long unsigned int,雖然這抑制了警告訊息,但回圈仍然不會運行。這種行為的原因是什么,我該如何解決?
#include <iostream>
#include <string>
#include <vector>
using namespace std;
void print_board(vector<vector<char>> board)
{
int row, col;
cout << " ";
for (row = -1; row < board.size(); row )
{
if (row > -1)
cout << row << " ";
for (col = 0; col < board[row].size(); col )
{
if (row == -1)
cout << col << " ";
else
cout << board[row][col] << " ";
}
cout << endl;
}
}
int main()
{
int max_rows = 5;
vector<vector<char>> player_one_board(max_rows, vector<char>(max_rows, '-'));
print_board(player_one_board);
return 0;
}
uj5u.com熱心網友回復:
如果您所做的只是列印出電路板,那么您真的不應該從 -1 開始,而是從 0 開始。那是:
std::cout << " ";
for (std::size_t row = 0; row < board[0].size(); row) {
std::cout << row << " ";
}
std::cout << std::endl;
for (std::size_t row = 0; row < board.size(); row) {
std::cout << row << " ";
for (std::size_t col = 0; col < board[row].size(); col) {
std::cout << board[row][col] << " ";
}
std::cout << endl;
}
uj5u.com熱心網友回復:
向量不能由少于 0 個元素組成。用 0 初始化行,或者如果行小于 0,則使用 continue 跳過 col 的回圈。
uj5u.com熱心網友回復:
警告基本上告訴你一切:board.size()未簽名,所以應該是row。當您抑制警告時,現在的問題不是比較,而是如何row使用-1. 它真的不應該,因為它是未簽名的,它不能容納-1. 相反,它會悄悄地用一些正數初始化。在這一點上,您沒有收到另一個警告或錯誤確實是 C 的錯。由于 C 遺留問題,它的型別系統有點弱。
這里的解決方案是保持row未簽名并以不同的方式表達您的邏輯,不使用-1.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/321228.html
標籤:C
下一篇:為什么這個字符陣列需要是靜態的?
