2017. 1. 4. 23:16ㆍIT-개발/C및C++
컨테이너의 특정 구간을 특정 값으로 채우고 싶을 때가 있다. 이 값이 동일한 것이라면 컨테이너의 assign() 멤버를 사용하면 되지만 동일한 값이 아니라면 assign()을 사용할 수 없다.
이 때 사용하는 알고리즘이 generate이다. generate 알고리즘에 값을 채울 컨테이너의 시작과 끝, 값을 생성할 함수를 파라미터로 넘긴다
generate 알고리즘의 대상이 되는 컨테이너는 값을 채울 공간이 미리 만들어져 있어야 한다. 즉 generate는 컨테이너에 데이터를 추가하는 것이 아니고 기존의 데이터를 다른 값으로 변경하는 것이다.
#include <algorithm>
#include <vector>
#include <iostream>
struct User
{
int UID;
int RaceType;
int Sex;
int Money;
};
struct SetUserInfo
{
SetUserInfo() { UserCount = 0; }
User operator() ()
{
User user;
++UserCount;
user.UID = UserCount;
user.Money = 2000;
if( 0 == (UserCount%2) )
{
user.RaceType = 1;
user.Sex = 1;
user.Money += 1000;
}
else
{
user.RaceType = 0;
user.Sex = 0;
}
return user;
}
int UserCount;
};
int main()
{
vector< User > Users(5);
generate( Users.begin(), Users.end(), SetUserInfo() );
char szUserInfo[256] = {0,};
vector< User >::iterator IterUser;
for( IterUser = Users.begin(); IterUser != Users.end(); ++IterUser )
{
sprintf( szUserInfo, "UID %d, RaceType : %d, Sex : %d, Money : %d",
IterUser->UID, IterUser->RaceType, IterUser->Sex, IterUser->Money );
cout << szUserInfo << endl;
}
return 0;
}
'IT-개발 > C및C++' 카테고리의 다른 글
[펌] C/ C++ 전처리 - #if #else #elif #endif 등등... (0) | 2017.05.17 |
---|---|
format 숫자 출력하기 (0) | 2017.05.11 |
STL - algorithm - for_each (0) | 2017.01.04 |
STL - algorithm - find (0) | 2017.01.04 |
STL - algorithm (0) | 2017.01.04 |