声明int变量aux a.length =();或者在所有循环中使用o.length()?

时间:2016-06-15 21:08:28

标签: c++ visual-c++

我想知道哪个更快:说我正在处理一些文字(30个字符),这会更好吗?并且有很多文本哪个更好?

1 -

int tam = text.length();
for(int i=0;i<tam;i++)
{
    //something here//
}

2 -

for(int i=0;i<a.length();i++)
{
    //something here//
}

并比较这两个:

1 -

        for (int i = 0; i < b.length(); i++)
        {
            aux = a.find(b[i]);
            if (aux == -1)
            {
                sucess = 0;
                break;
            }
            else
            {
                a.erase(aux,1);
            }
        }

2 -

        for (int i = 0; i < b.length(); i++)
        {
            if (a.find(b[i]) == -1)
            {
                sucess = 0;
                break;
            }
            else
            {
                a.erase(a.find(b[i]),1);
            }
        }

2 个答案:

答案 0 :(得分:0)

作为一般经验法则,随着计算变得更大,更复杂,更频繁,您希望最大限度地减少不必要的计算。这意味着存储需要在变量中计算的内容可以加快该过程。

在两个示例中,对于大数字

int scratch = big.length();

for(int i=0;i<scratch;i++){
    //body//
}

通常更快。

将来,像这样的一般性问题往往属于Code Review Stack Exchange

答案 1 :(得分:0)

首先是更好的方法。

在第一个示例中,您要检查每个周期是否i<a.length()为真。这意味着您将在每次迭代时执行a.length()。如果变量a没有改变,则没有必要,更好的方法是先计算并使用该值。

请注意,如果在内部更改变量a,则放置i<a.length()可能是正确的方法。这取决于你的问题。

在第二个例子中,它是相同的基础。您可以避免无用的计算,因为您不需要在else中再次计算a.find(b[i])