c++ - C++反向 'for'循环

标签 c++ for-loop unsigned

我有一个 vector :

std::vector<int> vec = {1, 2, 3};
我想做一个反向for循环。当我写道:
for(int i = vec.size() - 1; i >= 0; --i) {
    std::cout << i << std::endl; // 2, 1, 0
}
但是如果我这样写,我得到的数字非常大(例如18446744073709223794):
for(size_t i = vec.size() - 1; i >= 0; --i) {
    std::cout << i << std::endl;
}
但是当我写这篇文章时,它们都可以工作:
for(int i = 0; i < vec.size() - 1; ++i) {
    std::cout << i << std::endl; // 1, 2, 3
}

// Or
for(size_t i = 0; i < vec.size() - 1; ++i) {
    std::cout << i << std::endl; // 1, 2, 3
}
为什么我使用size_t时得到的 vector 大小错误?
我认为转换有问题。

最佳答案

让编译器告诉您出什么问题了!

如果您在启用警告的情况下编译程序,则编译器将使用tell这样的代码:

<source>: In function 'int main()':

7:43: warning: comparison of unsigned expression in '>= 0' is always true [-Wtype-limits]
    7 |     for(std::size_t i = vec.size() - 1; i >= 0; --i) {
      |                                         ~~^~~~

这是为什么?这是因为 std::size_t 是C++中的无符号类型。它仅代表非负数。阅读有关打开警告及其重要性的更多信息:Why should I always enable compiler warnings?

那么,我们应该如何反向重复呢?

我已经决定将此处的答案拆分为一个独立的问题,与OP的错误无关。请go read it

关于c++ - C++反向 'for'循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62357610/

相关文章:

r - 对全局环境中的每个数据帧应用操作

c - "? :"发生了什么?我不知道返回类型

C 数据类型现实生活示例

c++ - QtQuick 动画卡住列表和打开串口

javascript - 请求帮助 : setting up a grid using nested if loops (JavaScript)

ios - Objective C 如何合并多个 NSMutableArray?

mySQL 5.0.45 LAST_INSERT_ID() 和大于 signed int 的值

c++ - 观察无锁队列的大小

c++ - OpenMP/C++ : number of elements in for-loop

c++ - 是什么导致继承和成员之间的结构体大小不同?