如何用c++來實現字串的倒序呢
我直接想到的是利用反向迭代器reverse_iterator:rbegin()和rend():
string str1("1234567890");
string str2(str1.rbegin(), str1.rend());
這是利用operator=(const string&),別忘了還有成員函式assign這個利器:
string str1("1234567890");
str1.assign(str1.rbegin(), str1.rend());
這是使用了成員函式assign的一種過載:
templatebasic_string& assign(inputiterator first, inputiterator last);
不過這很容易產生疑問(這少我是產生了):看起來都是在相同的記憶體上操作,會不會有問題。類似memcpy的src和dst有重疊的情況?
c++標準告訴我們,是不會有問題的——標準(iso2003)21.3.5.3:
templatebasic_string& assign(inputiterator first, inputiterator last);
returns: assign(basic_string(first,last))
原來會產生乙個臨時變數:basic_string(first,last)。疑慮消除了。
但是,能不能直接在string中逆序元素呢?這樣就避免了臨時變數的產生。自己動手寫是不難,不過,stl中提供了大量的演算法,看看其中有沒有我們需要的:
template void reverse ( bidirectionaliterator first, bidirectionaliterator last)
這個template void reverse ( bidirectionaliterator first, bidirectionaliterator last)相當不錯,完美解決了我們的問題:
str1("1234567890");
reverse(str1.begin(), str1.end());
陣列sort方法實現列表的正序和倒序
doctype html en utf 8 viewport content width device width,initial scale 1.0 document title table th,td style head 姓名 th 年齡 th 性別 th 分數 th tr thead tbo...
關於String類的寫實拷貝
在自己定義的string類中使用寫實拷貝來提高效率。寫實拷貝是在淺拷貝的基礎上使用引用計數器來拷貝物件,如果有物件被拷貝構造時只需要將計數器 不用再開闢新的空間。可以編寫初版的 define crt secure no warnings 1 include using namespace std c...
關於String類的常用方法
string類的常用方法有這些 1.string byte bytes 將byte陣列中全部轉換為字串 string byte bytes,int offset,int length 引數的意思是 位元組陣列,陣列元素下標的起始位置,長度 這種方法可以讓byte陣列一部分轉換成字串 2.string...