首页 > 解决方案 > 不存储字符串长度和其他此类值会使程序变慢吗?

问题描述

在这里,我有两个代码功能:

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() 这样的函数是否在恒定时间内分别给出大小和长度(通过在每次插入或删除发生时预先计算它,然后在调用时只提供值for in vector.size 或 string.length) 还是遍历整个数据结构以在每次调用该方法时计算它。

我知道所有这些都是非常基本的疑问,但我从未见过程序员谈论这个,我想确定一下。我在 C++ 方面的有限经验也无济于事。

标签: c++stringdata-structuresstl

解决方案


推荐阅读