如何解决是否不存储字符串长度和其他此类值会使程序变慢?
我这里有两个代码功能:
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 举报,一经查实,本站将立刻删除。