イテレータに格納されたアドレスを表示してみましょう

ソーラー「


では


vector型のクラステンプレート



array型のクラステンプレート


の使い方が分かったところで


vector型のクラステンプレート



array型のクラステンプレート


の両方を用いて


数値データをメモリに格納する


プログラムを実行してみたいと思います



#include <iostream>


#include <vector>//🌞ヘッダファイル<vector>をインクルードするのを忘れずに!


#include <array>🌞ヘッダファイル<array>をインクルードするのを忘れずに!


using namespace std;


int main() {


vector<int> a = { 1,2,3 };


vector<int>::iterator itr1 = a.begin();



cout << *itr1 << "\n";

cout << &*itr1 << "\n";



array<int,3> b = { 4,5,6 };


array<int,3>::iterator itr2 = b.begin();


cout << *itr2 << "\n";

cout << &*itr2 << "\n";



return 0;

}


プログラムの実行結果


1

00DBE498

4

008FF828


ソーラー「


vector型のクラステンプレート


を用いて


数値データ1をメモリに格納しました


数値データ1を格納したメモリのアドレスは


00DBE498


です🌞


array型のクラステンプレート


を用いて


数値データ4をメモリに格納しました


数値データ4を格納したメモリのアドレスは


008FF828


ですね🌞」


マックス「



         cout << &*itr1 << "\n";


         cout << &*itr2 << "\n";


を実行して


数値データ1を格納したメモリのアドレス



数値データ4を格納したメモリのアドレス


コマンドプロンプト画面に表示したのか?





             &*itr1

             &*itr2 




とは面白い表現だな



itr1に


数値データ1を格納したメモリのアドレスが


格納されているんで


          cout << itr1 << "\n"; 


itr2に


数値データ4を格納したメモリのアドレスが


格納されているんで


          cout << itr1 << "\n"; 



でいいんじゃないか」


てんC「では


早速


 

         cout << &*itr1 << "\n";


         cout << itr1 << "\n";



 に


         cout << &*itr2 << "\n";


         cout << itr2 << "\n";



変更してプログラムを実行してみます


その時のプログラムはこちらです

👇


#include <iostream>


#include <vector>


#include <array>


using namespace std;


int main() {


vector<int> a = { 1,2,3 };


vector<int>::iterator itr1 = a.begin();



cout << *itr1 << "\n";

cout << itr1 << "\n";


array<int,3> b = { 4,5,6 };


array<int,3>::iterator itr2 = b.begin();


cout << *itr2 << "\n";

cout << itr2 << "\n";


return 0;

}


 ビルド実行結果


エラー C2679 二項演算子 '<<': 型 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>' の右オペランドを扱う演算子が見つかりません (または変換できません)。

エラー C2679 二項演算子 '<<': 型 'std::_Array_iterator<_Ty,3>' の右オペランドを扱う演算子が見つかりません (または変換できません)。

エラー (アクティブ) E0349 これらのオペランドと一致する演算子 "<<" はありません エラー (アクティブ) E0349 これらのオペランドと一致する演算子 "<<" はありません


マックス「なんと 


         cout << itr1 << "\n";

         cout << itr2 << "\n";


では


アドレスを表示することができない?」


ソーラー「そうなんです


たとえば


ポインタ変数aに格納されたアドレスを表示するには


ポインタ変数aにアスタリスク演算子*を作用させた


*a



&を作用させて



&*a



とし



        cout << &*a << "\n";



を実行する必要があります



同様に


イテレータitrに格納されたアドレスを表示するには


イテレータitrにアスタリスク演算子*を作用させた


*itr



&を作用させて



&*itr



とし



        cout << &*itr << "\n";



を実行する必要があります」










  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る