論壇裡見到這個問題:如何把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 需求調研階段,中小型專案缺少專業的需求分析師,僅靠專案經理個人來擔當,而對專案經理的需求調研指導,目前也只是 師傅 臨時指導的方式,缺乏系統的培訓...