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

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

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

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

Q&A

解決済

3回答

2163閲覧

vectorを仮引数とした関数を作りたい

LenItsuki

総合スコア89

C++

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

0グッド

0クリップ

投稿2020/09/04 07:46

前提・実現したいこと

vectorのポインタを引数とする関数を作成しています.

発生している問題・エラーメッセージ

引数としているvectorのところで以下のようなエラーが出ています。
visual studio codeで当該部分にマウスを当てると「式には,クラス型が必要です。」と表示されます。
しかしながら,どう対処すればよいかわからずにいます。解決法をご教示頂けますと助かります。

y2:max_min moto$ g++ -c max.cpp max.cpp:12:60: error: member reference base type 'int *' is not a structure or union std::vector<int>::iterator itr_max = std::max_element(v.begin(), v.end()); ~^~~~~~ max.cpp:12:71: error: member reference base type 'int *' is not a structure or union std::vector<int>::iterator itr_max = std::max_element(v.begin(), v.end()); ~^~~~ max.cpp:15:39: error: member reference base type 'int *' is not a structure or union size_t max_index = std::distance(v.begin(), itr_max); ~^~~~~~ 3 errors generated.

該当のソースコード

C++

1#include <iostream> 2#include <vector> 3#include <algorithm> 4 5using namespace std; 6 7//import vector v 8void max(int* v) 9{ 10 11//max_element:: 12 std::vector<int>::iterator itr_max = std::max_element(v.begin(), v.end()); 13 14 // size_t min_index = std::distance(v.begin(), itr_min); 15 size_t max_index = std::distance(v.begin(), itr_max); 16 17 std::cout << "max element id=" << max_index << endl; 18 std::cout << "max element (hairetsu):" << v[max_index] << std::endl; 19 std::cout << "max element (pointer):" << *itr_max << std::endl; 20}

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

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

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

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

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

guest

回答3

0

引数としているvectorのところで以下のようなエラーが出ています。
void max(int* v) { ... }

もしかして: int* と vector<int> は同じものと思っていますか?

C++

1void max(const std::vector<int>& v) { 2 3 std::vector<int>::const_iterator itr_max = std::max_element(v.begin(), v.end()); 4 size_t max_index = std::distance(v.begin(), itr_max); 5 6 std::cout << "max element id=" << max_index << endl; 7 std::cout << "max element (hairetsu):" << v[max_index] << std::endl; 8 std::cout << "max element (pointer):" << *itr_max << std::endl; 9}

投稿2020/09/04 11:11

編集2020/09/04 11:37
episteme

総合スコア16614

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

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

0

ベストアンサー

引数の型をvector<int>にすれば良いと思います。

C++ 値渡し、ポインタ渡し、参照渡しを使い分けよう

追記:
余談ですが関数名max()はstd::maxと被るので避けたほうが良いと思います。
回答が読みやすくなるようにあえてusing namespace std;を使用しています。

C++

1#include <bits/stdc++.h> 2using namespace std; 3 4// import vector v 5void func_max(vector<int>* v) { 6 // max_element:: 7 vector<int>::iterator itr_max = max_element(v->begin(), v->end()); 8 9 // size_t min_index = std::distance(v.begin(), itr_min); 10 size_t max_index = distance(v->begin(), itr_max); 11 12 cout << "max element id=" << max_index << endl; 13 cout << "max element (hairetsu):" << v->at(max_index) << endl; 14 cout << "max element (pointer):" << *itr_max << endl; 15} 16 17int func(vector<int>* v) { 18 int result = 0; 19 if (!v->empty()) { 20 sort(v->begin(), v->end()); 21 result = v->back(); 22 } 23 return result; 24} 25 26int main() { 27 vector<int> v({3, 2, 1}); 28 cout << "sort:" << func(&v) << endl; 29 func_max(&v); 30 getchar(); 31}

// output
sort:3
max element id=2
max element (hairetsu):3
max element (pointer):3

投稿2020/09/04 08:11

編集2020/09/04 08:43
mjk

総合スコア303

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

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

LenItsuki

2020/09/09 21:54

うまくいきました。どうもありがとうございます。
guest

0

vectorのポインタを引数とする関数を作成しています.

C++

1void max(int* v)

どう見てもintのポインタです。

投稿2020/09/04 07:49

ozwk

総合スコア13521

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問