: 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;
}
//---------------------------------------------------------------------------