汎用容器1
1.コンテナは、他のオブジェクトを持つオブジェクトを記述する.
2,c++処理容器はテンプレートに基づく方式を採用する.
3、vectorの効率的なアクセス要素、listの効率的な挿入など、異なる種類の容器が必要である.
4、容器保有対象の要求:(1)コピー可能;(2)付与可能である.
5,コンテナとコンテナの違い:(1)メモリにオブジェクトを格納する方法;(2)ユーザにどのような操作を与えるか.
6、容器分類まとめ:
(1)シーケンスコンテナ(vector,list,dequeue):要素を線形に組織する.
(2)コンテナアダプタ(queue,stack,priority_queue):シーケンスに特殊な属性を付加する.
(3)関連コンテナ(map,set,multiset,multimap):キーワードでデータを整理し、迅速なアクセスを許可する.
7.容器がconst容器である場合、begin()およびend()はconst反復器を生成する.
すなわち、これらの反復器が指す要素を変更することは許されない.
8,可逆容器の反復器:rbegin(),rend().
インスタンスコード:(読み込まれたファイル、行を逆順序で出力)
9、異なるタイプの挿入器の使用.
インスタンスコード:
10.ストリーム・反復器とストリーム・バッファ反復器の使用を比較します.
インスタンスコード:
2,c++処理容器はテンプレートに基づく方式を採用する.
3、vectorの効率的なアクセス要素、listの効率的な挿入など、異なる種類の容器が必要である.
4、容器保有対象の要求:(1)コピー可能;(2)付与可能である.
5,コンテナとコンテナの違い:(1)メモリにオブジェクトを格納する方法;(2)ユーザにどのような操作を与えるか.
6、容器分類まとめ:
(1)シーケンスコンテナ(vector,list,dequeue):要素を線形に組織する.
(2)コンテナアダプタ(queue,stack,priority_queue):シーケンスに特殊な属性を付加する.
(3)関連コンテナ(map,set,multiset,multimap):キーワードでデータを整理し、迅速なアクセスを許可する.
7.容器がconst容器である場合、begin()およびend()はconst反復器を生成する.
すなわち、これらの反復器が指す要素を変更することは許されない.
8,可逆容器の反復器:rbegin(),rend().
インスタンスコード:(読み込まれたファイル、行を逆順序で出力)
#include <fstream>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main()
{
ifstream in("main.cpp");
string line;
vector<string> lines;
while(getline(in, line))
lines.push_back(line);
for(vector<string>::reverse_iterator r = lines.rbegin();r != lines.rend(); r++)
cout << *r << endl;
return 0;
}
9、異なるタイプの挿入器の使用.
インスタンスコード:
#include <iostream>
#include <vector>
#include <deque>
#include <list>
#include <iterator>
using namespace std;
int a[] = { 1, 3, 5, 7, 11, 13, 17, 19, 23 };
template<class T>
void frontInsertion(T& c)
{
copy(a,a+sizeof(a)/sizeof(a[0]),front_inserter(c));
copy(c.begin(),c.end(),ostream_iterator<typename T::value_type>(cout," "));
cout<<endl;
}
template<class T>
void backInsertion(T& c)
{
copy(a,a+sizeof(a)/sizeof(a[0]),back_inserter(c));
copy(c.begin(),c.end(),ostream_iterator<typename T::value_type>(cout," "));
cout<<endl;
}
template<class T>
void midInsertion(T& c)
{
typename T::iterator it = c.begin();
++it; ++it; ++it;//
copy(a, a + sizeof(a)/sizeof(typename T::value_type),inserter(c, it));
copy(c.begin(),c.end(),ostream_iterator<typename T::value_type>(cout," "));
cout << endl;
}
int main()
{
vector<int> vec;
list<int> lst;
deque<int> deq;
frontInsertion(deq);
frontInsertion(lst);
deq.clear();
lst.clear();
backInsertion(vec);
backInsertion(deq);
backInsertion(lst);
midInsertion(vec);
midInsertion(deq);
midInsertion(lst);
return 0;
}
10.ストリーム・反復器とストリーム・バッファ反復器の使用を比較します.
インスタンスコード:
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
using namespace std;
int main()
{
ifstream in(__FILE__);
// :
istreambuf_iterator<char> isb(in), end;
ostreambuf_iterator<char> osb(cout);
while(isb != end)
*osb++ = *isb++; // Copy 'in' to cout
cout << endl;
// , .
ifstream in2(__FILE__);
istream_iterator<char> is(in2), end2;
ostream_iterator<char> os(cout);
while(is != end2)
*os++ = *is++;
cout << endl;
}