Из совсем
простеньких задач (но тема то "при изучении"?):
В последовательности вводимых чисел удалить повторяющиеся совпадающие числа (серии), оставив на месте этих серий только одно вхождение повторяющегося числа.
Это может быть так:
Код: Выделить всё
#include <bits/stdc++.h>
using namespace std;
ostream& operator <<( ostream& out, const list<int>& obj ) {
out << "[ ";
for( auto i: obj ) cout << i << " ";
return out << "]";
}
void ddubl( list<int>& obj ) {
auto c = obj.begin(), n = c;
n++;
while( c != obj.end() ) {
if( *n == *c ) {
auto d = n;
n++;
obj.erase( d );
}
else {
c = n;
n++;
}
if( n == obj.end() )
break;
}
}
int main( int argc, char *argv[] ) {
list<int> lst;
while( true ) {
lst.clear();
string e;
getline( cin, e );
if( !cin || 0 == e.length() ) break;
istringstream ist( e );
int d;
while( ist >> d )
lst.push_back( d );
cout << lst << " => ";
ddubl( lst );
cout << lst << endl;
}
}
В коде применены расширения стандарта C++11, но это только "для красоты"
- для укорочения кода ... можете легко это устранить. Сборка:
Код: Выделить всё
[olej@dell dlist]$ g++ -Wall -std=c++11 -O3 dlist.cc -o dlist
Выполнение:
Код: Выделить всё
[olej@dell dlist]$ ./dlist
1 1 2 3 4
[ 1 1 2 3 4 ] => [ 1 2 3 4 ]
1 2 2 2 3 4 5 5 5 6
[ 1 2 2 2 3 4 5 5 5 6 ] => [ 1 2 3 4 5 6 ]
1 2 3 4 4 4 4
[ 1 2 3 4 4 4 4 ] => [ 1 2 3 4 ]