有没有更优雅的方式在C++ 11中执行以下操作?

klo*_*oop 1 c++ c++11

我想避免关于unsigned int和signed int之间的比较的警告.

我使用循环,如:

for (int i =0 ; i < vec.size(); i++) {
 // do something
}
Run Code Online (Sandbox Code Playgroud)

这给了这些警告(这本身很好,我想要高级别的警告).

我想把它改成以下内容:

for (auto i = vec.size()*0; i < vec.size(); i++) {
 // do something
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我没有得到警告.但我想知道是否有比这更优雅的东西,它会自动推断出迭代器所需的类型.

Nei*_*irk 8

使用基于范围的for循环

for (auto& i : vec)
{
    cout << *i;
}
Run Code Online (Sandbox Code Playgroud)

使用迭代器.

for (auto it = vec.begin(), end_it = vec.end(); it != end_it; ++it)
{
    cout << *it;
}
Run Code Online (Sandbox Code Playgroud)

如果你想要一个柜台,使用std::vector<T>::size_type或只是size_t你懒惰.

  • 我不会说使用`size_t`是懒惰的.当容器是模板类型时,唯一真正想要使用`size_type`的是泛型编程.剩下的时间你知道`size_type`是`size_t`,但`size_t`要写得更清晰. (2认同)