STL学習シリーズの2つ——シーケンスコンテナ(vector)
2808 ワード
STL学習の二系列容器(vector)
一、C++標準テンプレートライブラリにはvector、list、dequeの3つのシーケンスコンテナがあります.クラステンプレートvectorとdequeは配列に基づいており,クラステンプレートlistはチェーンテーブルのデータ構造を実現している.
STLで最も流行しているのはクラステンプレートvectorで、より丈夫なデータ型であり、動的配列に相当し、配列のサイズを動的に変更することができます.
VectorとCとC++の元の配列は違います.どうして違うの?vectorは互いに値を割り当てることができるので、ポインタベースのCスタイルの配列はこの使い方をサポートしていません.なぜですか.これらの配列の名前は定数ポインタであるため,付与の目標とすることはできない.C配列のようにvectorの下付きスケールは自動範囲チェックを実行しませんが、テンプレートvectorはatメンバー関数で配列の下付きスケール範囲をチェックすることができます.例では参照してください.ほほほ
vector、list、dequeにはそれぞれ効率的な使用範囲があります.
vectorは容器の後端に効率的に挿入するために使用され、中間に要素を挿入して削除する効率は低い.
Listは、コンテナの中間位置と2つの端点で常に挿入および削除するために使用されます.
dequeは、コンテナの両端を効率的に挿入および削除するためによく使用されます.
1、vectorシーケンス容器
クラステンプレートvectorが提供するデータ構造は、連続的なメモリ位置を有し、これにより、CとC++の元の配列のように、下付き演算子[]によってvectorの任意の要素に効率的に直接アクセスすることができる.
vectorのメモリが消費されると、より大きな連続メモリ領域が割り当てられ、元の要素を心得メモリにコピーし、古いメモリを破棄します.
次にvectorと反復器を使用してdemoに直接接続する方法について説明します.
出力結果:
初期化配列サイズ:0
初期化配列容量:0
配列サイズ:3
配列容量:3
ポインタで配列を出力:1 2 3 4 5 6
反復器でvector:23 4を出力する
反転vectorの要素:4 3 2
注意:反復器の動作は、要素を指すポインタのように、演算子*を再ロードし、この要素を指す参照を返します.
vector要素を操作する関数
直接demoへ
出力結果:
Vector要素には、1 2 3 4 5 6が含まれます.
最初の要素は:1
最後の要素は6です.
変更後のvector要素の内容は:7 22 2 10 4 6
Exception:invalid vector subscript
最初の要素をクリアすると、22 2 10 4 5 6になります.
すべての要素をクリアした後、vectorの要素isempty
クリア前の内容:1 2 3 4 5 6
分かったらvector isempty
注意:front関数とbegin関数の違い:front関数はvectorの最初の要素の参照を返し、begin関数はvectorの最初の要素を指すランダムアクセス反復器を返します.
back関数とend関数の違い:back関数はvectorの最後の要素の参照を返し、end関数はランダムアクセス反復器を返し、vectorの末尾を指す.
一、C++標準テンプレートライブラリにはvector、list、dequeの3つのシーケンスコンテナがあります.クラステンプレートvectorとdequeは配列に基づいており,クラステンプレートlistはチェーンテーブルのデータ構造を実現している.
STLで最も流行しているのはクラステンプレートvectorで、より丈夫なデータ型であり、動的配列に相当し、配列のサイズを動的に変更することができます.
VectorとCとC++の元の配列は違います.どうして違うの?vectorは互いに値を割り当てることができるので、ポインタベースのCスタイルの配列はこの使い方をサポートしていません.なぜですか.これらの配列の名前は定数ポインタであるため,付与の目標とすることはできない.C配列のようにvectorの下付きスケールは自動範囲チェックを実行しませんが、テンプレートvectorはatメンバー関数で配列の下付きスケール範囲をチェックすることができます.例では参照してください.ほほほ
vector、list、dequeにはそれぞれ効率的な使用範囲があります.
vectorは容器の後端に効率的に挿入するために使用され、中間に要素を挿入して削除する効率は低い.
Listは、コンテナの中間位置と2つの端点で常に挿入および削除するために使用されます.
dequeは、コンテナの両端を効率的に挿入および削除するためによく使用されます.
1、vectorシーケンス容器
クラステンプレートvectorが提供するデータ構造は、連続的なメモリ位置を有し、これにより、CとC++の元の配列のように、下付き演算子[]によってvectorの任意の要素に効率的に直接アクセスすることができる.
vectorのメモリが消費されると、より大きな連続メモリ領域が割り当てられ、元の要素を心得メモリにコピーし、古いメモリを破棄します.
次にvectorと反復器を使用してdemoに直接接続する方法について説明します.
#include
using namespace std;
#include
template void printVector(const vector &integers2);
int _tmain(int argc, _TCHAR* argv[])
{
const int SIZE=6;
int array[SIZE]={1,2,3,4,5,6}; //
vector integers;
// size capacity
cout<::const_reverse_iterator reverseIterator;
vector::const_reverse_iterator tempIterator=integers.rend();
for (reverseIterator=integers.rbegin();reverseIterator!=tempIterator;++reverseIterator)
{
cout< void printVector(const vector &integers2)
{
typename vector::const_iterator constIterator;
for (constIterator=integers2.begin();constIterator!=integers2.end();++constIterator)
{
cout<
出力結果:
初期化配列サイズ:0
初期化配列容量:0
配列サイズ:3
配列容量:3
ポインタで配列を出力:1 2 3 4 5 6
反復器でvector:23 4を出力する
反転vectorの要素:4 3 2
注意:反復器の動作は、要素を指すポインタのように、演算子*を再ロードし、この要素を指す参照を返します.
vector要素を操作する関数
直接demoへ
#include
using namespace std;
#include
#include
#include
#include
int _tmain(int argc, _TCHAR* argv[])
{
const int SIZE=6;
int array[SIZE]={1,2,3,4,5,6};
vectorintegers(array,array+SIZE);
ostream_iterator output(cout," ");
cout<
出力結果:
Vector要素には、1 2 3 4 5 6が含まれます.
最初の要素は:1
最後の要素は6です.
変更後のvector要素の内容は:7 22 2 10 4 6
Exception:invalid vector subscript
最初の要素をクリアすると、22 2 10 4 5 6になります.
すべての要素をクリアした後、vectorの要素isempty
クリア前の内容:1 2 3 4 5 6
分かったらvector isempty
注意:front関数とbegin関数の違い:front関数はvectorの最初の要素の参照を返し、begin関数はvectorの最初の要素を指すランダムアクセス反復器を返します.
back関数とend関数の違い:back関数はvectorの最後の要素の参照を返し、end関数はランダムアクセス反復器を返し、vectorの末尾を指す.