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
[41446] Re:[질문] int vector 를 n개의 sub int vector로 slice 할수 없을까요?
WARSHIP [] 948 읽음    2005-08-12 19:27
#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 1682 2005/08/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.