stl的字符串類是否可變?用整型轉換爲字符替換字符串中的字符會花費多少成本?替換字符串中的字符的成本是多少?
2
A
回答
3
1)是的,它是可變的。 operator []和at()都會返回字符的非常量引用,並且可以在左側使用:name[7] = 'X'
或name.at(7) = 'X'
如果要進行邊界檢查。
2)更改單個字符的成本非常低:與C字符串非常接近或相同(加上邊界檢查的成本與at()
。)雖然標準不要求,但所有實現std :: string將字符串存儲在連續的內存塊中(如果我能正確記住Meyers),那麼就地修改一個字符將是恆定的。
另請參閱boost string algorithms,它們通常提供流行字符串操作的副本和就地版本。
0
是的。
線性查找字符(但如果您已經知道索引,則爲常數)。如果你的問題假設字面上的含義,實際的替代是恆定的時間。如果您實際上是指整數的字符串表示形式,則替換點在替換點後的字符數將是線性的。
1
是的,您可以修改std::string
的內容。
例如,使用std::string::operator[]
:
std::string str("foo");
str[0] = 'b';
std::cout << str << std::endl;
將輸出"boo"
。
替換單個字符的成本是任何將字符複製到平臺上的內存位置成本。可能不多。
1
是的,它是可變的。
如果你的意思是這樣的:
std::string s("space\n");
int i = 'i';
s[2] = (char)i;
std::cout << s; // prints 'spice'
的細節是實現定義的,但第三個行一般包括:
- 負載從字符串的指針值
- 添加索引它
- 執行一個字節存儲到該地址
所以它很便宜。在調試模式下可能會出現邊界檢查等,並且可能還有其他代碼,但上述基本上是它必須做的。
相關問題
- 1. 字符串替換多個字符串
- 2. 字符串中的字符串替換
- 3. 替換方法不是替換字符串中的字符
- 4. 用一個字符替換字符串中的多個字符
- 5. 如何替換字符串中的字符有許多字符
- 6. 替換字符串中的字符Java
- 7. Java - 替換字符串中的字符
- 8. 替換字符串中的字符
- 9. Swift - 替換字符串中的字符
- 10. c中的字符串替換字符#
- 11. Java - 替換字符串中的字符
- 12. 替換字符串中的字符?
- 13. Postgres替換字符串中的字符
- 14. 替換字符串中的字符
- 15. 替換字符串中的字符
- 16. 替換字符串中的字符
- 17. 替換字符串中的字符
- 18. VBA - 替換字符串中的字符
- 19. 字符串中的替換字符
- 20. 字符串中的字符替換
- 21. 替換Java字符串中的'\'字符
- 22. 替換字符串中的字符
- 23. 替換字符串中的字符malloc
- 24. 替換&字符串中的字符
- 25. Java - 字符串中的字符替換
- 26. 替換字符串中的字符C
- 27. 替換字符串中的字符
- 28. 替換字符串中的字符
- 29. 替換字符串中的字符
- 30. 替換字符串中的字符,Java
該規範並不要求內部表示法是連續的,但它_does_要求'at'和'operator []'是恆定時間。 – Nemo
使用C++ 0x時,連續性成爲'std :: string'實現的要求。 – pmr
太棒了!感謝Nemo和pmr! – olooney