【发布时间】:2016-03-20 13:36:39
【问题描述】:
我正在设计一个密码,需要在循环中重复地在碱基之间进行转换。我已经优化了其他所有内容,但我对 C++ 代码不太熟悉,并且正在尝试弄清楚如何使转换更快。
这是我正在使用的当前代码:
string digits = "0123456789abcdef";
string tohex(string number) { // Decimal to Hexadecimal function
long length = number.length();
string result = "";
vector<long> nibbles;
for ( long i = 0; i < length; i++ ) {
nibbles.push_back(digits.find(number[i]));
}
long newlen = 0;
do {
long value = 0;
newlen = 0;
for ( long i = 0; i < length; i++ ) {
value = (value * 10) + nibbles[i];
if (value >= 16) {
nibbles[newlen++] = value / 16;
value %= 16;
} else if (newlen > 0) {
nibbles[newlen++] = 0;
};
};
length = newlen;
result = digits[value] + result;
} while (newlen != 0);
return result;
}
【问题讨论】:
-
您是否尝试通过分析器运行它?
-
如果代码已经按预期运行但感觉太慢,请尝试询问Code Review 的问题:)
-
push_back会杀了你。 -
@MikeDunlavey,我认为这是上述代码中操作的最小问题..
-
result = digits[value] + result将是O(n²)如果完成O(n)次。不要那样做。
标签: c++ string performance optimization converter