back_insert_iterator와iterator는 사용하기에 다르다.

4221 단어 iterator
먼저 코드 보기:
#include<iostream>

#include<vector>

#include<algorithm>

#include<iterator>

using namespace std;

int main()

{

    vector<int> coll;

    //create back_inserter for coll

    // - inconvenient way

    back_insert_iterator<vector<int> > iter(coll);



    //insert elements with the usual iterator interface

    *iter =1;

    iter++;

    *iter =2;

    iter++;

    *iter = 3;

    copy(coll.begin(),coll.end(),ostream_iterator<int>(cout,", "));

    cout<<endl;



    //create back inserter and insert elements;

    //- convenient way

    back_inserter(coll) = 44;

    back_inserter(coll) = 55;

    copy(coll.begin(),coll.end(),ostream_iterator<int>(cout,", "));

    cout<<endl;



    //use back inserter to append all elements again

    //reserve enough memory to avoid reallocation 

    coll.reserve(2*coll.size());

    copy(coll.begin(),coll.end(),//source

        back_inserter(coll));//destination

    copy(coll.begin(),coll.end(),ostream_iterator<int>(cout,", "));

    cout<<endl;

}

위 코드의 이 행은 다음과 같습니다.
back_insert_iterator<vector<int> > iter(coll);

어댑터를 정의했습니다.개인적으로도iterator에 속한다고 생각해서 사용법이 차이가 많지 않을 것 같아서 조롱박을 보고 다음과 같은 코드를 써서 하나의iterator를 정의했다.
iterator<vector<int> > iter1(coll);

결과 오류: error C2976: "std::iterator": 템플릿 파라미터가 너무 적습니다.
iterator 소스 코드를 봤는데 수준이 제한되어 있고 파라미터가 적다는 것만 알 뿐 구체적으로 어떻게 보완해야 할지 모르겠습니다.나중에 생각해 보니 보통iterater를 정의하는 데 다음과 같은 형식을 사용한다.
vector<int>::iterator iter1;

iter1 = coll.begin();

백과insert_iterator의 정의 방식은 완전히 다르다. 나는 백이라고 생각한다insert_iterator는 어떤 용기의 일부분이 아니라 용기 이외의 동쪽에 독립해야 한다.이것은 아마도 그것들의 정의 방식이 다른 원인일 것이다.

좋은 웹페이지 즐겨찾기