C++プログラムでのイテレータの無効化
このチュートリアルでは、C++でのイテレータの無効化を理解するためのプログラムについて説明します。
コンテナオブジェクトの要素を反復処理しているときに、境界チェックを適用しないと無効になることがあります。これは主に、コンテナオブジェクトの形状とサイズの変更が原因で発生します。
例
#include <bits/stdc++.h> using namespace std; int main() { //declaring a vector vector <int> v{1, 5, 10, 15, 20}; //changing vector during execution //which will cause bound invalidation for (auto it=v.begin();it!=v.end();it++) if ((*it) == 5) v.push_back(-1); for (auto it=v.begin();it!=v.end();it++) cout << (*it) << " "; return 0; }
出力
1 5 10 15 20 -1 -1
(新しい要素を追加するために、イテレータが古い要素をポイントしたまま、ベクトルが新しい場所にコピーされ、エラーが発生する場合もあります。)
-
STLでベクトルを実装するC++プログラム
ベクトルには、要素が挿入または削除されたときに動的配列のように自動的にサイズを変更する機能があり、コンテナはストレージを自動的に処理します。ベクトル要素は、イテレータを使用してアクセスおよびトラバースできるように、連続したストレージに配置されます。データは、ベクトルの最初、中間、または最後で挿入または消去できます。 機能と説明: List of functions used here: v.size() = Returns the size of vector. v.push_back() = It is used to insert ele
-
ベクトルを実装するC++プログラム
ベクトルは、要素が挿入または削除された場合にそれ自体のサイズを変更できる動的配列です。ベクトル要素は連続したストレージに含まれ、コンテナはストレージを自動的に処理します。 ベクトルを実装するプログラムは次のように与えられます- 例 #include <iostream> #include <vector> #include <string> #include <cstdlib> using namespace std; int main() { int ch, val; vector<