C ++代码性能字符串比较

时间:2016-01-21 13:45:56

标签: c++ string performance

我有一个struct(arrBoards)数组,它有一些整数值,vector和一个字符串类型。 我想比较结构中的某个字符串是否与输入的参数(字符串p1)相等。

更快的想法 - 用数组中的每个字符串元素检查输入字符串的方程式,或者首先检查数组的当前字符串元素中的string.length()是否大于0,然后比较字符串。

if (p1.length())
{
    transform(p1.begin(), p1.end(), p1.begin(), ::tolower); //to lowercase
    for (int i=0; i<arrSize; i++) //check if string element already exists
        if ( rdPtr->arrBoards[i].sName == p1 )
        {
            */ some code */
            break;
        }
}

if (p1.length())
{
    transform(p1.begin(), p1.end(), p1.begin(), ::tolower); //to lowercase
    for (int i=0; i<arrSize; i++) //check if string element already exists
        if ( rdPtr->arrBoards[i].sName.length() ) //check length of the string in the element of the array
            if ( rdPtr->arrBoards[i].sName == p1 )
            {
                */ some code */
                break;
            }
}

我认为第二个想法更好,因为它不需要每次都计算名称,但我可能错了,因为使用if会减慢代码。

感谢您的回答

3 个答案:

答案 0 :(得分:5)

我确定字符串类的比较运算符(==)已经足够优化了。只是使用它。

operator ==(...)根据短路比较返回一个bool

public function index()
{

    if (!$this->ion_auth->logged_in())
    {
        redirect('account/sign_in', 'refresh');
    }
    elseif ($this->ion_auth->is_admin())
    {
        $this->template->administrator('dashboard/dashboard');
        //View to Administrator
    }
    elseif($this->ion_auth->in_group('admin'))
    {
        $this->template->admin('dashboard/dashboard');
        //View to Admin
    }
    elseif($this->ion_auth->in_group('user'))
    {
        $this->template->user('dashboard/dashboard');
        //View to User
    }
    else
    {
        $this->template->client('dashboard/dashboard');
        //View to Client
    }
}

它在调用compare()之前检查字符串的大小,因此,不需要进一步优化。

永远记住软件工程的一个原则:KISS:P

答案 1 :(得分:1)

你想要做的是玩百分比。 由于字符串很可能不同,因此您希望尽快找到它。

您首先要比较长度,但不要假设长度计算成本低,与您正在做的其他事情相比。

这是我做过的事情(在C中):

if (a[0]==b[0] && strcmp(a, b)==0)

所以如果前导字符不同,它永远不会进入字符串比较。 如果数据集使得主要字符 可能不同,则会节省大量时间。 (strcmp也有这种优化,但你仍然需要付出设置参数和进出函数的代价。我们在这里讨论的是少量循环。)< / p>

如果你做了类似的事情,那么你可能会发现循环迭代开销花费了很长一段时间。 如果是这样,您可以考虑展开它。 (编译器可能会为您展开它,但我不会依赖它。)

答案 2 :(得分:0)

比较数字比比较字符串要快。在比较字符串本身之前尝试比较字符串长度。