use*_*411 0 c++ loops for-loop
我相信下面的两个循环是相同的,任何人都知道为什么它们的情况不同| s1 | > | s2 |?
string s1 = "abcd";
string s2 = "abc";
int s1len = s1.length()
int s2len = s2.length()
for (int i = 0; i <= s2len - s1len; i++) {
// it will never calls (as expected, since 3 - 4 = -1)
}
for (int i = 0; i <= s2.length() - s1.length(); i++) {
// it calls once (which is strange)
}
Run Code Online (Sandbox Code Playgroud)
std::string::length()返回无符号整数类型.无符号的intergal类型遵循模运算,这样-1映射到该类型的larges值.这意味着第二个循环中的减法产生一个非常大的数而不是一个负数.
你可以尝试这个来自己搞清楚:
std::cout << s2.length() - s1.length() << std::endl;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
44 次 |
| 最近记录: |