如何把string的元素逆序呢?

2021-06-02 23:24:45 字數 1327 閱讀 1202

論壇裡見到這個問題:如何把string的元素逆序?

我直接想到的是利用反向迭代器reverse_iterator:rbegin()和rend():

string str1("1234567890");

string str2(str1.rbegin(), str1.rend());

這樣的話逆序string就儲存在str2裡了。要是想儲存在原string呢,這樣:

string str1("1234567890");

str1 = string(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());

陣列元素的逆序數

求乙個n個元素的逆序數 例如 的逆序數為 0 2 0 1 0 3 最直接的求解逆序數方法時間複雜度為o n 2 如果用分治的策略可以將時間複雜度降為o n logn 求n個元素的逆序數的分治思想如下 首先求前n 2個元素的逆序數,再求後n 2個 元素的逆序數,最後在排序過程中合併前後兩部分之間的逆序...

求N個元素的逆序數

求n個元素的逆序數 解法一 窮舉,時間複雜度為o n2 解法二 使用歸併排序計算逆序數,時間複雜度o n lngn 使用分治思想,以mid值將序列分為左序列 left mid 右序列 mid 1 right 將左右子串行排序好之後,進行合併。合併時獲得逆序數,因為左序列已經保證有序,當右序列的值小於...

如何改善當前的現狀呢?

因為有些工作上的事情,曾申請過調離部門欲擺脫當前苦惱的局面。上週跟一級部門副總監溝通了個人體會,提出了一些個人的想法。在此記錄下來,也希望能拋磚引玉。1 需求調研階段,中小型專案缺少專業的需求分析師,僅靠專案經理個人來擔當,而對專案經理的需求調研指導,目前也只是 師傅 臨時指導的方式,缺乏系統的培訓...