別のクラステンプレートの型で用いられているイテレータに 別のクラステンプレートの型で用いられているイテレータを 代入することはできません

ソーラー「


では再び


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


ですね🌞」


マックス「もしかして


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


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


を実行すると


イテレータitr1には


数値データ1を格納しているメモリのアドレスが代入されるのなら


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


array<int,3>::iterator itr2 = itr1;

               👆ここに注目

を実行し


itr2をitr1で初期化したら


itr2に


数値データ1を格納しているメモリのアドレスを代入できるんじゃないか?」


ソーラー「それもそうですね


それでは


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


そのプログラムはこ・ち・ら💖

👇

#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 = itr1;


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 これらのオペランドと一致する演算子 "<<" はありません

エラー C2440 '初期化中': 'std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>' から 'std::_Array_iterator<_Ty,3>' に変換できません。

エラー (アクティブ) E0312 "std::_Vector_iterator<std::_Vector_val<std::_Simple_types<int>>>" から "std::_Array_iterator<int, 3U>" への適切なユーザー定義変換が存在しません



ソーラー「ははあ


成程


vector<int>型のイテレータitr1で


array<int, 3>>型のイテレータitr2


を初期化することはできないんだね


つまり


別のクラステンプレートの型で用いられているイテレータで


別のクラステンプレートの型で用いられているイテレータを


初期化することはできないってわけなんだね


もちろん


別のクラステンプレートの型で用いられているイテレータに


別のクラステンプレートの型で用いられているイテレータを


代入することはできません


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

👇


#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;

itr2 = itr1;// イテレータitr2にイテレータitr1を代入しようとしています


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

cout << itr2 << "\n";


return 0;

}


ビルド実行結果


重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態

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

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

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

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

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

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





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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

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

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

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