是否不存储字符串长度和其他此类值会使程序变慢?

问题描述

我这里有两个代码功能

string func1(string s) {
        for(int i=0;i<s.length();i++){
            for(int j=i+1;j<=s.length();j++){
                cout << i <<"\t"<<j<<endl;
            }
        }
        return "test";
    }

string func2(string s) {
        int n = s.length();
        for(int i=0;i<n;i++){
            for(int j=i+1;j<=n;j++){
                cout << i <<"\t"<<j<<endl;
            }
        }
        return "test";
    }

两者都做同样的事情。打印i和j组合的值。但是我一直想知道,每次在代码中提及s.length()时,都不会将其存储在像n触发器一样的变量中。如果是这样,那么func2应该比func1运行得更快。

是C ++编译器和其他编程语言编译器具有某种巧妙的检测方法,并确保在转换为机器语言时不会发生这种重新计算的情况?

然后我还有另一个问题,做诸如vector.size()或string.length()之类的函数,分别在恒定时间内给出大小和长度(通过每次插入或删除时都对其进行预先计算,然后仅提供值是在vector.size或string.length中被调用时),还是遍历整个数据结构以在每次调用方法时对此进行计算。

我知道所有这些都是相当基本的疑问,但是我从未见过程序员谈论此事,我想确定。我有限的C ++经验也无济于事。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)