質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

4454閲覧

vectorを利用した時だけ、coutがエラーになる。(これらのオペランドと一致する演算子 "<<" はありません)

ratera

総合スコア54

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2020/07/06 02:05

編集2020/07/06 02:35

以下のコードのコメントアウトした2か所( //失敗したものの箇所)が、コンパイル時にエラーになります。
なぜ、vectorを利用した時だけこのようなエラーになるのか教えてほしいです。

これらのオペランドと一致する演算子 "<<" はありません -- オペランドの型: std::ostream << __gnu_cxx::__normal_iterator<int *, std::vector<int, std::allocator<int>>>

C++

1#include <stdio.h> 2#include <vector> 3#include <algorithm> 4#include <iostream> 5#include <string> 6using namespace std; 7 8int main(void) 9{ 10 std::vector<int> vec{1, 2, 3, 4, 5, 6}; 11 12 printf("要素:n"); 13 for (auto it = vec.begin(); it != vec.end(); ++it) 14 printf("%d,", *it); 15 printf("nn"); 16 17 //失敗したもの 18 //cout << vec.begin() << " " << vec.end() << endl; 19 //cout << vec << endl; 20 21 //試したこと1 22 printf("アドレスは%p\n", vec); 23 printf("アドレスは%p\n", vec.begin()); 24 25 //試したこと2 26 int num = 1; 27 cout << "num;" << &num << endl; 28 cout << "test" << endl; 29 30 31 auto it = std::find(vec.begin(), vec.end(), num); 32 33 if (it != vec.end()) 34 { 35 printf("%dは見つかりました。n", num); 36 } 37 else 38 { 39 printf("%dは見つかりませんでした。n", num); 40 } 41 return 0; 42} 43

※追記
以下に類似の質問がありました(読んでもちょっと難しかったですが、参考になるかもなので載せておきます)
https://teratail.com/questions/228763

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

なぜ、vectorを利用した時だけこのようなエラーになるのか

ストリームに vector が << されたら何をするか、教えてあげていないから。

C++

1#include <iostream> 2#include <vector> 3 4// stream に vector が << されたときは 5template<typename T> 6std::ostream& operator<<(std::ostream& stream, const std::vector<T>& vec) { 7 for ( const T& item : vec ) { // vec内の各要素:itemに対し 8 stream << item << ' '; // それをstreamに<<する。(ついでに' 'も) 9 } 10 return stream; 11} 12 13int main() { 14 std::vector<int> vec = { 1, 2, 3, 4, 5 }; 15 std::cout << vec << std::endl; 16 return 0; 17}

投稿2020/07/06 02:15

episteme

総合スコア16614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ratera

2020/07/06 02:39 編集

ありがとうございます!コメントつけていただいたお陰で、雰囲気わかりました!>< まだ、魔法に見えて、文法読み解く所からになりそうです。 特に以下の行は、何が何にかかっているのか、どこがatomicなのか厳しめなのですが、 ステップアップのコツがありましたら、教えて頂けると幸いです。 ・std::ostream& operator<<(std::ostream& stream, const std::vector<T>& vec) {`
episteme

2020/07/06 03:04

atomic云々が関係あるんですか?
ratera

2020/07/06 09:51

BNF 文法記法のような意味合いで使いました どの単位で読んだらよいのかということです。
episteme

2020/07/06 10:11

std::ostream& 戻り値 operator<< 関数名 std::ostream&  引数の型と stream 名前 const std::vector<T>& 引数の型と vec 名前
ratera

2020/07/06 23:36

ありがとうございます!!調べるとっかかりができました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問