Q) 0, 1, 4, 9, 16, ..., 144 까지의 제곱수를 "계산하여" 순서대로 배열에 넣은 후,
이중 처음으로 50보다 큰 제곱수는 무엇의 제곱수인지 찾아내시오.
A) 물론 답은 8 * 8 == 64죠.
다음은 루프를 전혀 사용하지 않고 구현하는 방법입니다.
여기서 사용한 알고리듬은
iota, transform, find_if 입니다.
#include <cassert>
#include <iostream>
#pragma hdrstop
#include <algorithm>
#include <numeric>
#include <functional>
#include <vector>
using namespace std;
int main()
{
// Create a vector with values 0, 1, 4, 9, 16, ..., 144:
vector<int> vector1(13);
iota(vector1.begin(), vector1.end(), 0);
transform(vector1.begin(), vector1.end(), vector1.begin(), vector1.begin(),
multiplies<int>());
vector<int>::iterator where;
where = find_if(vector1.begin(), vector1.end(),
bind2nd(greater<int>(), 50));
assert (*where == 64);
assert (where - vector1.begin() == 8); // 반복자 연산은 포인터 연산과 거의 같습니다.
cout << " --- Ok." << endl;
return 0;
}
|