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
[41452] Re:Re:[감사합니다] vector< vector >로 해결했습니다.
kalamazu [] 1681 읽음    2005-08-13 12:53
WAHSHIP님 친철한 답변과 코드에 감사 드립니다.
vector template에 다시 vector 를 쓸수 있는줄 몰랐습니다.
template과 vector란 개념에 대해 다시 공부를 해야 할 것 같습니다 ^^;
아주 중요한 부분을 일깨워 주셔서 감사합니다.

WASHIP님의 코드는 제가 실행해 봤는데 완벽하게 잘 돌아갑니다.
참고로 저는 Low-Density Parity Check code 를 공부하고 있고요,
분야는 Applied Coding Theory 입니다.
혹 정보가 필요하시면 ㅎㅎ...


다음과 같이
vector< vector<int> > cnodes; 를 사용하여 해결했습니다.
=================================================================
vector< vector<int> > cnodes;
vector<int> itemp;

for(int i=0; i<CdegreeSet.size();i++)
{
  for(int j=0;j<CdegreeSet[i];j++)
  {
   itemp.push_back(VedgeSet[j]);
  }
  cnodes.push_back(itemp);
  itemp.erase(itemp.begin(),itemp.end());
  VedgeSet.erase(VedgeSet.begin(), VedgeSet.begin()+CdegreeSet[i]);
}//<----end of outer "for" loop

VdegreeSet.clear();
CdegreeSet.clear();
VedgeSet.clear();
=================================================================




WARSHIP 님이 쓰신 글 :
: #include <vector>
: #include <algorithm>
: #include <stdio.h>
:
: using namespace std;
:
: template <typename T>
: void SliceVector(vector<T> &orig , vector< vector<T> > &Target , int size )
: {
:     /* size 가 0이면 리턴 */
:     if(size==0) return;
:
:     /* 오리지날 벡터의 초기 위치 설정 */
:     vector<T>::iterator pos=orig.begin();
:
:     /* 몇개로 잘라질지 계산, +1의 이유는 마지막에 */
:     unsigned int SliceSize = orig.size()/size;
:     Target.resize(SliceSize+1);
:    
:     /* size 만큼씩 Target벡터에 대입 */
:     for(unsigned int i=0;i<SliceSize;++i)
:     {
:         Target[i].assign(pos,pos+size);
:         pos+=size;
:     }
:
:     /* Original 백터가 size로 딱 나누어 떨어지지 않을경우
:        끝의 남은것들을 Target의 마지막에 집어넣어줌 */
:     if ( (orig.size()%size) != 0 )
:         (Target.back()).assign(pos,orig.end());
:     /* 나누어 떨어진다면 여유로 넣어놨던 마지막 vector<T>를 삭제함 */
:     else
:         Target.pop_back();   
: }
:
: int main(int argc, char *argv[])
: {
:     vector<int> original;
:     vector< vector<int> > SliceVec;
:
:     original.reserve(1000);
:
:     for(int i=0;i<1000;++i ) original.push_back(i);
:
:     /* Slicing */
:     SliceVector(original,SliceVec,20);
:
:
:     printf("Sliced vector size : %d\n",SliceVec.size());
:     for(unsigned int i=0;i<SliceVec.size();++i)
:     {
:         printf("\nSliceVec[%d].size() = %d\n",i,SliceVec[i].size());
:         for(unsigned int j=0;j<SliceVec[i].size();++j)
:             printf("%4d",SliceVec[i][j]);
:     }
:
:     return 0;
: }
:
: 더이상의 설명은 생략 ^^;
: 좋은하루 보내시길 바랍니다.

: assign,resize,reserve 함수를 잘 이용하면 좀더 효과적일수 있습니다. ^^;
:
:
:
: kalamazu 님이 쓰신 글 :
: : 안녕하세요.
: : 제목처럼 vector 객체를 원하는 갯수만큼의 sub vector로 자를수 있는 방법이 필요해서요.
: : 질문을 좀더 구체적으로 설명하면,
: : 예를 들어서
: :
: : vector<string> vs;
: : vs="this:is:a:test.......";
: :
: : 이런 식으로 선언하면
: :
: :  for (int i=0;i<vs.size();i++)
: :  {
: :    vs=vs.substr((vs.find(":")+1));
: :  }
: : 이런식으로 string vector 인 vs를 vs[1], vs[2], vs[3] 세개로 자를수 있잖습니까?
: :
: : 그러면 이번엔
: :
: : vector<int> intv;
: : 로 선언하고
: :
: : 다음과 같이 값을 채워 넣은다음
: : for(int i=0; i<1000;i++)
: : {
: :   intv.push_back(i);
: : }
: :
: : 그다음,
: : int N=20;
: :
: : 이제 제 질문은  intv 벡터를 N=20개의 서브벡터로 잘라낼수 있는 방법이 없습니까?
: : vs의 경우 string 벡터라서 구분자를 사용하여 substr를 이용하여 잘라낼수 있었습니다만...
: : intv의 경우 string 벡터가 아니라서 substr은 안통할것 같아서요.
: : 좋은 답변 부탁드립니다.

+ -

관련 글 리스트
41441 [질문] int vector 를 n개의 sub int vector로 slice 할수 없을까요? kalamazu 927 2005/08/12
41446     Re:[질문] int vector 를 n개의 sub int vector로 slice 할수 없을까요? WARSHIP 948 2005/08/12
41452         Re:Re:[감사합니다] vector< vector >로 해결했습니다. kalamazu 1681 2005/08/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.