c++unique関数の戻り値

1988 ワード

std::unique
機能:順序付けされたコンテナを並べ替え、最初に現れた要素を後ろに並べ替え、他の繰り返し現れた要素を後ろに並べ替える
戻り値:反復を返します.反復は繰り返し要素の最初のアドレスを指します.
表現が分からない場合は、次の簡単な図を見てください.
整然としたコンテナ:
1
1
2
3
3
4
4
4
5
6
Uniqueで処理されたコンテナ:
unique
unique
unique
unique
unique
unique
反復器が指すアドレス
 
 
 
1
2
3
4
5
6
1
3
4
4
コードは次のとおりです.
#include
#include
#include 
#include 

using namespace std;
typedef vector  VECTOR_STRING;

void printVec(VECTOR_STRING& vec)
{
	for(size_t nItem = 0; nItem < vec.size(); nItem++)
	{
		cout << "Name[" << nItem << "] = \" ";
		cout << vec[nItem] << " \" " << endl;
	}
	cout << endl;
}

int main()
{
	VECTOR_STRING vecNames;
	vecNames.push_back("john");
	vecNames.push_back("bob");
	vecNames.push_back("john");
	vecNames.push_back("vctor");
	vecNames.push_back("vctor");
	vecNames.push_back("jim");
	vecNames.push_back("bob");
	vecNames.push_back("jim");

	cout << "the initial contents are:" << endl;
	printVec(vecNames);

	sort(vecNames.begin(), vecNames.end());

	cout << "after sort(), contents are:" << endl;
	printVec(vecNames);

	VECTOR_STRING::iterator iNameTor;
	iNameTor = unique(vecNames.begin(), vecNames.end());

	cout << "after unique(), contents are:" << endl;
	printVec(vecNames);

	cout << "unique return a iterator, point to the first Duplicate element " << endl;
	cout << iNameTor - vecNames.begin() << endl << endl;

	vecNames.erase(iNameTor, vecNames.end()); //      
	cout << "after erase(), contents are:" << endl;
	printVec(vecNames);
}