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

C++빌더 Q&A
C++Builder Programming Q&A
[18289] Re:[만해] 또 STL요~ 흑흑~
김백일 [cedar] 898 읽음    2002-05-08 20:35
:   matrix1은 128 이고요
:
:   matrix3, matrix4 는 matrix1을 둘로 쪼개서 앞 부분은 matrix3,
:
:   뒷 부분은 matrix4에 집어 넣어야 하느데요
:
:   copy(matrix1.begin(),matrix1.begin(),matrix3.begin());
:   copy(matrix1.begin()+65,matrix1.end(),matrix4.begin());
:   copy(matrix2.begin(),matrix2.begin()+64,matrix5.begin());
:   copy(matrix2.begin()+65,matrix2.end(),matrix6.begin());
:  
:   이런식으로 해결을 할려고 하니깐
:  
:   안되네요

안녕하세요! cedar 김백일입니다.
이제서야 답글을 드립니다.
암호화 프로그램은 이미 다 짜셨겠지만,
STL적 관점에서 해결 방법을 제시해보지요.

이 경우는 제가 예전에 올린 방법(C/C++ Tip'N Tricks의 2번 글)
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=2
과 같이 행렬을 구현하면 매우 불편합니다.

선형 주소 공간(linear address space)인 vector나 deque에
행렬의 원소를 매핑하는 방법에 대해서 새로 Tip'N Tricks에 올렸습니다.
일단 읽고 나서 다음 내용을 읽어주세요.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=4

128의 비트어레이를 deque<bool>로 구현했다고 하셨죠?
이걸 두개의 8x8 행렬에 나누어 집어넣으시려면,
copy() 알고리듬을 사용하는 방법도 있지만,
vector나 deque의 멤버 함수인 assign()을 쓰는 게 더 낫습니다.

"같은 기능을 가진 것이 있다면, 알고리듬보다는 멤버 함수를 사용하는 것이 좋습니다."
(Effective STL 중에서)

항상 필요한 기능을 멤버 함수에서 먼저 찾으신 후,
없으면 알고리듬을 쓰는 습관을 기르시는 것이 좋습니다.

이 작업을 구현한 예제를 다음에 적습니다.

//---------------------------------------------------------------------------
#include <cstdlib>
#include <iostream>
#pragma hdrstop
#include <deque>
#include <algorithm>
#include <iterator>
#include "matrices.h"
//---------------------------------------------------------------------------

class RandomGenerator {
public:
    RandomGenerator(int r) : range(r)
    { randomize(); }
    int operator() ()
    { return random(range); }
private:
    int range;
};

#pragma argsused
int main(int argc, char* argv[])
{
    deque<bool> bitarray(128);
    RandomGenerator zero_one(2);
    generate(bitarray.begin(), bitarray.end(), zero_one);

    cout << "bitarray\n";
    copy(bitarray.begin(), bitarray.end(), ostream_iterator<int>(cout, " "));

    CMatrix<bool, deque<bool> > matrix_front(8, 8), matrix_rear(8, 8);

    matrix_front.C.assign(bitarray.begin(), bitarray.begin() + 63);
    matrix_rear.C.assign(bitarray.begin() + 64, bitarray.end());

    cout << "\nmatrix_front\n";
    for(size_t i = 0; i < matrix_front.Rows(); ++i) {
       for(size_t j = 0; j < matrix_front.Columns(); ++j)
          cout << matrix_front(i,j) << ' ';
       cout << endl;
    }

    cout << "matrix_rear\n";
    for(size_t i = 0; i < matrix_rear.Rows(); ++i) {
       for(size_t j = 0; j < matrix_rear.Columns(); ++j)
          cout << matrix_rear(i,j) << ' ';
       cout << endl;
    }

    return 0;
}
//---------------------------------------------------------------------------

+ -

관련 글 리스트
18289 Re:[만해] 또 STL요~ 흑흑~ 김백일 898 2002/05/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.