【问题标题】:Is i++ or ++i better for this program?i++ 还是 ++i 更适合这个程序?
【发布时间】:2020-10-17 17:07:12
【问题描述】:

我正在尝试创建一个程序来检查输入是 int 还是 string。

这是代码:

// CPP program to check if a given string 
// is a valid integer 
#include <iostream> 
using namespace std; 
  
// Returns true if s is a number else false 
bool isNumber(string s) 
{ 
    for (int i = 0; i < s.length(); i++) 
        if (isdigit(s[i]) == false) 
            return false; 
  
    return true; 
} 
  
// Driver code 
int main() 
{ 
    // Saving the input in a string 
    string str = "6790"; 
  
    // Function returns 1 if all elements 
    // are in range '0-9' 
    if (isNumber(str)) 
        cout << "Integer"; 
  
    // Function returns 0 if the input is 
    // not an integer 
    else
        cout << "String"; 
} 

我想问一下 i++ 还是 ++i 更适合这个循环,为什么?

for (int i = 0; i < s.length(); i++) 
        if (isdigit(s[i]) == false) 
            return false;

谢谢!

【问题讨论】:

  • 输入总是一个字符串。问题是该字符串中的 text 是否可以converted 为整数。不要忽视这种区别。如果你这样做,迟早你会被咬得很厉害。
  • 另外,在测试 C 风格分类函数的返回值时要非常小心(本例中为isdigit)。他们返回一个整数; 0 表示测试失败,非零表示测试成功。 if (isdigit(s[i] == false) 会起作用,因为false 会转换为 0。但如果你需要另辟蹊径,if (isdigit(s[i] == true) 不一定会起作用。 true 转换为 1,但函数不需要返回 1,通常会返回一些其他值。为了可靠地检查这一点,让编译器完成工作:if (!isdigit(s[i]))if (isdigit(s[i])) 将可靠地工作。

标签: c++ string function for-loop integer


【解决方案1】:

由于 i 的数据类型是 int,所以使用 i++ 或 ++i 都没有关系。 如果它是一个大型类迭代器,++i 比 i++ 快。使用 ++i 是一个好习惯。

【讨论】:

  • 谢谢!你能告诉我++i和i++有什么区别吗?
  • @AustinParker ++i 递增 i,然后使用 ii++ 使用 i,然后递增。在这里,您使用哪个顺序并不重要,因为您没有在该语句中使用i,但在某些情况下预增量可能会有一些性能优势。问题是,如果你知道这个技巧,编译器也很可能会这样做。
【解决方案2】:

我更喜欢 C++ 中的++i 形式,因为i 可能是一个迭代器或其他重载operator++ 的对象。在这些情况下,i++ 形式会生成一个临时对象来保存 i 的先前值,而 ++i 形式不会。编译器可能会优化掉那个临时对象,但这不是必需的,在某些情况下可能不允许这样做。

所以,++ii++ 稍微好一点,因为前者不需要保留初始值并重新检查它。这是时间优化和内存优化同时发生的极少数情况之一。但是差异太小了,无法注意到,只有 4 个字节。而且,时间差可以忽略不计。

您在示例中基本上会得到相同的答案,但在使用 ++i 时可能会获得一分钟的时间和内存优化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 1970-01-01
    • 2015-05-24
    相关资源
    最近更新 更多