假设列表中的所有元素都只重复一次,您可以使用这种方法。
#include <list>
#include <iterator>
#include <iostream>
#include <algorithm>
int main (int argc, char* argv[])
{
char data[] = {'A', 'B', 'A', 'C', 'C', 'D', 'E', 'F', 'E', 'F', 'D', 'B'};
std::list<char> c( data, data + sizeof(data) / sizeof(char) );
// Remove all duplicates
c.sort();
std::list<char>::iterator i = std::unique( c.begin(), c.end() );
c.resize( std::distance(c.begin(), i) );
// Add 'M' (or MARK, if we were using strings).
c.push_back( 'M' );
// Add all the elements excluding 'M' to the back of the list.
std::copy( ++c.rbegin(), c.rend(), std::back_inserter(c) );
return 0;
}
如果某些元素不重复,您还没有给出对输出的期望。因此,我无法为这种情况提供正确的行为。该方法可以通过使用 std::unordered_set (C++11) 或其他一些哈希集(例如 Dinkum 的 stdext::hash_set)来实现 O(n)。