我對C++比較陌生。我正在練習一個編碼問題,這與將字符串轉換爲迴文有關。性能 - 使用字符串構造函數vs使用串聯
我被存儲在一個矢量中的字母計數和以後產生這樣的迴文 -
string palindrome_string;
for (short i = 0; i < 26; ++i) {
alphabet_count[i] /= 2;
for (short j = 0; j < alphabet_count[i]; ++j)
palindrome_string += string(1, static_cast<char>('a' + i));
}
但是,對於一個特定的測試的情況下(含有2.10僅^ 5點e
的輸入),則程序被超過內存限制爲256 MB。然後,我用這個語句替換了內部循環 -
palindrome_string += string(alphabet_count[i], static_cast<char>('a' + i));
並且程序運行良好,只使用了大約2.4 MB。
所以我想問一下,這是否與使用連接vs構造函數的性能有關,如果是,那麼可能的原因是什麼?
如果它的事項,我編譯MS VC++ 2010
程序如果有幫助,這裏有意見書(代碼) - the failed one(測試用例:10)和the successful one。
當你這樣做時,你可能會在每次迭代中獲得新的分配。大概每次分配稍大一點的分片對於分配器來說都是不好的情況。然而,它很糟糕仍然令人驚訝。 – zch
@zch同意。字符串在構建時預先分配一些內存空間。 OP可以嘗試用一個簡單的char來替換字符串結構:palindrome_string + ='a'+ i; – texasbruce
構建臨時字符串實際上沒有意義。 'palindrome_string.append(static_cast('a'+ i),alphabet_count [i])'會做同樣的事情。 –
VTT