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
コードは次のとおりです.
機能:順序付けされたコンテナを並べ替え、最初に現れた要素を後ろに並べ替え、他の繰り返し現れた要素を後ろに並べ替える
戻り値:反復を返します.反復は繰り返し要素の最初のアドレスを指します.
表現が分からない場合は、次の簡単な図を見てください.
整然としたコンテナ:
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);
}