728x90
반응형
ostream_iterator
#include <iostream>
#include <list>
using namespace std;
void main()
{
int ari[]={1,2,3,4,5};
list<int> li(&ari[0],&ari[5]);
ostream_iterator<int> oit(cout,",");
copy(li.begin(),li.end(),oit);
// copy(li.begin(),li.end(),ostream_iterator<int>(cout,","));
}
istream_iterator
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template<typename C>
void dump(const char *desc, C c)
{
cout.width(12);
cout << left << desc << "==> ";
copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," "));
cout << endl;
}
void main()
{
vector<int> vi(16);
istream_iterator<int> iit(cin);
copy(iit,istream_iterator<int>(),vi.begin());
//copy(istream_iterator<int>(cin),istream_iterator<int>(),vi.begin());
dump("입력 완료 후",vi);
}
fwdbiiterator
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";
copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }
void main()
{
int ari[]={78,85,95,93,86,60,72,99,56,85};
vector<int> vi(&ari[0],&ari[10]);
dump("원본",vi);
replace(vi.begin(),vi.end(),85,100);
dump("대체후",vi);
reverse(vi.begin(),vi.end());
dump("뒤집은 후",vi);
}
advance
#include <iostream>
#include <list>
using namespace std;
void main()
{
int ari[]={1,2,3,4,5,6,7};
list<int> li(&ari[0],&ari[7]);
list<int>::iterator it=li.begin();
printf("%d\n",*it); // 읽을 수 있다.
printf("%d\n",*(++it)); // 한칸 전진 가능
// printf("%d\n",it[3]); // 에러:임의 위치를 읽지는 못함
// it+=3; // 에러:임의 위치로 이동하지 못함
advance(it,3); // advance로 이동 가능
printf("%d\n",*it);
// printf("거리=%d\n",li.end()-li.begin()); // 에러:반복자끼리 뺄셈은 안됨
printf("거리=%d\n",distance(li.begin(),li.end())); // distance로 거리를 구하는 것은 가능
}
wrongiter
#include <iostream>
#include <list>
#include <algorithm>
using namespace std;
void main()
{
int ari[]={2,8,5,1,9};
list<int> li(&ari[0],&ari[5]);
sort(li.begin(),li.end());
}
copyoverwrite
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";
copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }
void main()
{
int ari[]={1,2,3,4,5};
vector<int> vi(&ari[0],&ari[5]);
int ari2[]={6,7,8,9,10,11,12,13,14,15};
vector<int>::iterator it;
it=find(vi.begin(),vi.end(),4);
copy(&ari2[0], &ari2[10], it);
dump("복사 후",vi);
}
vectorinsert
#include <iostream>
#include <vector>
#include <list>
using namespace std;
template<typename C> void dump(const char *desc, C c) { cout.width(12);cout << left << desc << "==> ";
copy(c.begin(),c.end(),ostream_iterator<typename C::value_type>(cout," ")); cout << endl; }
void main()
{
int ari[]={1,2,3,4,5};
vector<int> vi(&ari[0],&ari[5]);
dump("원본",vi);
insert_iterator<vector<int> > insit(vi,vi.begin()+2);
*insit=99;
*insit=100;
dump("삽입후",vi);
}
revcopy
#include <iostream>
#include <list>
using namespace std;
void main()
{
int ari[]={1,2,3,4,5};
list<int> li;
copy(&ari[0],&ari[5],front_inserter(li));
copy(li.begin(),li.end(),ostream_iterator<int>(cout," "));cout << endl;
}
constiterator
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int vectorsum(const vector<int> &cvt)
{
vector<int>::const_iterator cit;
int sum=0;
for (cit=cvt.begin();cit!=cvt.end();cit++) {
sum+=*cit;
}
// *cit=1234; // 에러
return sum;
}
void main()
{
int ari[]={80,98,75,60,100};
vector<int> vi(&ari[0],&ari[5]);
int sum;
sum=vectorsum(vi);
printf("총 합은 %d입니다.\n",sum);
}
revit
#include <iostream>
#include <vector>
using namespace std;
void main()
{
int ari[]={1,2,3,4,5};
vector<int> vi(&ari[0],&ari[5]);
vector<int>::reverse_iterator rit;
for (rit=vi.rbegin();rit!=vi.rend();rit++) {
printf("%d\n",*rit);
}
}
revfind
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void main()
{
int ari[]={6,2,9,2,7};
vector<int> vi(&ari[0],&ari[5]);
puts(find(vi.begin(),vi.end(),2)==vi.end() ? "없다.":"있다.");
puts(find(vi.rbegin(),vi.rend(),2)==vi.rend() ? "없다.":"있다.");
}
revbase
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void main()
{
const char *str="c++ standard template library";
vector<char> vc(&str[0],&str[strlen(str)]);
vector<char>::reverse_iterator rit;
vector<char>::iterator bit,it;
rit=find(vc.rbegin(),vc.rend(),'t');
bit=rit.base();
it=find(bit,vc.end(),'a');
if (it!=vc.end()) {
printf("검색 결과 = %c\n",*it);
}
}
728x90
반응형
'프로그래밍 기록 > stl' 카테고리의 다른 글
next_permutation,inner_product,lexicographical,make_heap (0) | 2023.12.09 |
---|---|
merge,minmax,accumulate,adjacent_difference (0) | 2023.12.09 |
replace,partition,transform,sort,lower_bound (0) | 2023.12.09 |
generate, remove, remove_copy, unique (0) | 2023.12.09 |
random_shuffle (0) | 2023.12.09 |
댓글