C++ STLの可変長配列ベクトルの詳細説明

Part.I 注意点

ここに画像の説明を挿入

使用vector上の注意点:

  • 引用を追加#include <vector>
  • 「配列」として直接呼び出すこともできるのですが!関数内の値を変更したい場合は、それを追加する必要があります&

いくつかのトリック:

// 将 b 中的元素去重并从小到大排序
sort(b.begin(),b.end());
b.erase(unique(b.begin(),b.end()),b.end());

第Ⅱ部 機能

ここに画像の説明を挿入

機能リスト:

関数名 意味
begin() コンテナ内の最初の要素を指すイテレータを返します。
end() コンテナの最後の要素の後の位置を指すイテレータを返します。通常はbegin()と組み合わせて使用​​されます。
rbegin() 最後の要素を指すイテレータを返します。
rend() 最初の要素の位置より前の位置を指す反復子を返します。
size() 実際の要素数を返します。
max_size() 要素の最大数を返します。通常、これは大きな値 (通常は 232-1) であるため、この関数を使用することはほとんどありません。
resize() 実際の要素数を変更します。
capacity() 現在の容量を返します。
empty() コンテナ内に要素があるかどうかを判断し、要素がない場合は true を返し、要素がない場合は false を返します。
reserve() コンテナの容量を増やします。
shrink _to_fit() 現在の要素が実際に使用しているサイズと同じになるまでメモリを削減します。
オペレーター[] [ ] 演算子はオーバーロードされており、配列内の要素にアクセスする場合と同様に、ベクター コンテナ内の要素にアクセスしたり、添字を使用して要素を変更したりすることができます。
at() 要素には、境界チェックされたインデックスを使用してアクセスします。
front() 最初の要素への参照を返します。
back() 最後の要素への参照を返します。
data() コンテナ内の最初の要素へのポインタを返します。
assign() 既存のコンテンツを新しい要素で置き換えます。
push_back() シーケンスの最後に要素を追加します。
pop_back() シーケンスの末尾から要素を削除します。
insert() 指定された位置に 1 つ以上の要素を挿入します。
erase() 要素または要素のブロックを外に移動します。
clear() すべての要素が削除され、コンテナのサイズが 0 になります。
swap() 2 つのコンテナのすべての要素を交換します。
emplace() 指定された位置に要素を直接生成します。
emplace_back() シーケンスの最後に要素を生成します。

第I章 コンストラクタ

  • vector(): 空のベクトルを作成します
  • :vector(int nSize)​要素数 nSize のベクトルを作成します
  • vector(int nSize,const t& t): ベクトルを作成します。要素数は nSize、値は t
  • :vector(const vector&)​コピーコンストラクター
  • vector(begin,end)​:[begin,end)範囲内の別の配列の要素をベクトルにコピーします

コンストラクターを呼び出す例を次に示します。

// 定义了10个整型元素的向量,初始化为 1
vector<int> a(10,1); 	
// 定义一个二维 vector 向量,所有元素初始化为 1
vector<int> a(10,1);
vector<vector<int>> aa(10,a);
// 通过 int[] 构造并初始化 vector
int b[7] = {
    
    1,2,3,4,5,9,8}; 
vector<int> a(b,b+7);
// 直接用数组构造
vector<int> a({
    
    1,2,3,4,5,9,8});

第Ⅱ章 追加機能

  • void push_back(const T& x)​: ベクトルの末尾に要素 X を追加します。
  • ​iterator insert(iterator it,const T& x): ベクトル内の反復子が要素を指す前に要素 x を追加します。
  • ​iterator insert(iterator it,int n,const T& x): 要素を指すベクトル内の反復子の前に、n 個の同一の要素 x を追加します。
  • ​iterator insert(iterator it,const_iterator first,const_iterator last)​:ベクトル内の反復子が要素を指す前に、同じタイプの別のベクトル[first,last)の間にデータを挿入します。

以下に簡単な操作例を示します。

vector<int> a(10,1);	// 10个1
auto itr=a.begin()+3;	// 得到第 3 个迭代器
a.insert(itr,2,8);		// 在迭代器的位置处插入 2 个 8,a=[1  1  1  8  8  1  1  1  1  1  1  1]

第Ⅲ章 削除機能

  • iterator erase(iterator it)​: ベクトル内の反復子が指す要素を削除します。
  • ​iterator erase(iterator first,iterator last)​:ベクター[first,last)内の要素を削除します。
  • void pop_back(): ベクトルの最後の要素を削除します
  • ​void clear(): ベクター内のすべての要素を空にします

以下に簡単な操作例を示します。

auto tmp=a.erase(a.begin()+2,a.begin()+4);
a.pop_back();		// 删除最后一个元素

vector最初の文の意味: 3番目の要素から5番目の要素までの2つの要素(含まれていません)が削除され、削除後の3番目の要素のイテレータが返されます。


第IV章トラバーサル機能

  • T at(int pos): 位置 pos の要素への参照を返します。
  • ​T front(): 最初の要素への参照を返します。
  • ​T back(): 末尾要素への参照を返します。
  • ​iterator begin()​: 最初の要素を指すベクトルヘッドポインタを返します。
  • ​iterator end()​: ベクトルの最後の要素の次の位置を指す、ベクトル末尾ポインタを返します。
  • reverse_iterator rbegin(): 最後の要素を指す逆反復子
  • ​reverse_iterator rend()::最初の要素の前の位置を指す逆反復子

知らせ:

  • ベクトル[]を使用して特定のインデックスの要素値を取得することはが、pythonそのようにスライスすることはできません。
  • end()最後の要素の後の反復子、*(vec.end()-1)つまり最後の要素の値を返します。
vector<int> b({
    
    1,2,3,4,5,6,7,8});
cout<<b.front()<<"  "<<b.back()<<endl;		// 1  8
cout<<*b.begin()<<"  "<<*(b.end()-1)<<endl;	// 1  8

第5章 判定・サイズ・その他の機能

  • bool empty() const: ベクトルが空かどうかを判断します。空の場合、ベクトルには要素がありません。
  • int size() const: ベクトル内の要素の数を返します。
  • ​int capacity() const: 現在のベクトルが保持できる最大要素値を返します。
  • ​int max_size() const​: ベクトル要素の最大許容数を返します。
  • void swap(vector&): 同じ型の 2 つのベクトルのデータを交換します
  • ​void assign(int n,const T& x): ベクトルの最初の n 要素の値を x に設定します
  • ​void assign(const_iterator first,const_iterator last):[first,last)ベクトル内の要素は現在のベクトル要素に設定されます

	cout<<b.empty()<<endl;
    cout<<b.size()<<"  "<<b.capacity()<<"  "<<b.max_size()<<endl;
    printVec(b);
    b.assign(6,10);     // 指定 b 中的元素为6个10
    printVec(b);
    b.assign(b.begin()+1,b.end()-1); // 去掉 b 第一个元素和最后一个元素
    printVec(b);

Part.III コード

以下はVector学習プロセスで使用されるコードです (実際には、上記のコードの要約です)。

#include <iostream>
#include <iomanip>
#include <vector>

using namespace std;

int main()
{
    
    
    auto printVec=[](vector<int> vec) {
    
    for(auto& c:vec) cout << c << "  ";cout << endl;};
    // 构造
    vector<int> a(10,1);
    printVec(a);
    // 插入
    auto itr=a.begin()+3;
    auto tmp = a.insert(itr,2,8);
    cout << *(tmp+1)<<endl;
    printVec(a);
    // 删除
    tmp=a.erase(a.begin()+2,a.begin()+4);// 删除的元素不包含 itr+1
    cout <<* tmp<<endl;
    printVec(a);
    a.pop_back();
    printVec(a);
    // 修改
    a[3]=3;
    a.push_back(4);
    printVec(a);
    // 遍历
    vector<int> b({
    
    1,2,3,4,5,6,7,8});
    cout<<b.front()<<"  "<<b.back()<<endl;
    cout<<*b.begin()<<"  "<<*(b.end()-1)<<endl;
    // 其他函数
    cout<<b.empty()<<endl;
    cout<<b.size()<<"  "<<b.capacity()<<"  "<<b.max_size()<<endl;
    printVec(b);
    b.assign(6,10);     // 指定 b 中的元素为6个10
    printVec(b);
    b.assign(b.begin()+1,b.end()-1); // 去掉 b 第一个元素和最后一个元素
    printVec(b);
    getchar();
    return 0;
}

出力は次のとおりです。

1  1  1  1  1  1  1  1  1  1
8
1  1  1  8  8  1  1  1  1  1  1  1
8
1  1  8  1  1  1  1  1  1  1
1  1  8  1  1  1  1  1  1
1  1  8  3  1  1  1  1  1  4
1  8
1  8
0
8  8  2305843009213693951
1  2  3  4  5  6  7  8
10  10  10  10  10  10
10  10  10  10

おすすめ

転載: blog.csdn.net/Gou_Hailong/article/details/128369496