此代碼在Windows下編譯時會引發警告。任何解決方案C++警告C4018:'<':有符號/無符號不匹配
#include<vector>
int main(){
std::vector<int> v;
//...
for (int i = 0; i < v.size(); ++i) { //warning on this line
//...
}
}
此代碼在Windows下編譯時會引發警告。任何解決方案C++警告C4018:'<':有符號/無符號不匹配
#include<vector>
int main(){
std::vector<int> v;
//...
for (int i = 0; i < v.size(); ++i) { //warning on this line
//...
}
}
與size_t i
替換的int i
所有定義。
std::vector<T>::size()
返回類型爲size_t
,它是無符號的(因爲它對容器不包含負數元素是沒有意義的)。
說std::size_t i = 0;
:
for (std::size_t i = 0; i != v.size(); ++i) { /* ... */ }
你也可以使用迭代器代替,以避免完全警告的潛力:
for (std::vector<int>::const_iterator i = v.begin(); i != v.end(); ++i)
{
...
}
或者,如果您正在使用C++ 11:因爲-3
for (int i : v)
{
...
}
這是餿主意int會比你的解決方案大size_t 31。儘管此解決方案適用於當前示例,但在其他情況下,這可能會導致難以調試錯誤。 – Sergei