什么更快......循环或分裂?

Che*_*eku -3 c++ performance

什么在C++中会更快?

考虑到循环的大小与被分割的数字中的位数相当的循环或除法.

And*_*owl 10

这样做有一个循环而没有分区(使用C++ 11的基于范围的for,但可以很容易地重写而不用):

std::string s = "123";
int base = 10; // Must be <= 10, or the technique below won't work
int n = 0; for (char c : s) { n = n * base + (c - '0');  }
std::cout << n; // Should output 123
Run Code Online (Sandbox Code Playgroud)

编辑:

一个更安全,稍微复杂的解决方案,它将解析字符串,直到满足非数字字符:

#include <iostream>

int convert(std::string const& s, int base)
{
    int n = 0;
    for (char c : s)
    {
        if (!isdigit(c)) { break; }
        n = n * base + (c - '0');
    }

    return n;
}

int main()
{
    std::string s = "123d";
    cout << convert(s, 10) << endl; // Should output 123
}
Run Code Online (Sandbox Code Playgroud)