關於string類的倒序和反向迭代器

2021-07-24 14:04:04 字數 1211 閱讀 3562

如何用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...