Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ 팁&트릭
[22] [STL]for, while, do 등의 루프를 알고리듬으로 대체하는 예제(2)
김백일 [cedar] 3803 읽음    2002-06-26 15:41
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;
}

+ -

관련 글 리스트
22 [STL]for, while, do 등의 루프를 알고리듬으로 대체하는 예제(2) 김백일 3803 2002/06/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.