STL - algorithm - generate

2017. 1. 4. 23:16IT-개발/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