Member 14586345 Ответов: 3

Как добавить массивы в качестве параметра для функции?


всем привет. у меня есть проблема с передачей массивов в качестве параметров функции. недавно я изучил векторы и попытался использовать векторы для решения этой проблемы, но это тоже не сработало.
ошибка находится в третьей строке от конца при вызове функции.

Что я уже пробовал:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;


bool existsHigher(std::vector<int> arr, int n)
{
	for (int i = 0; i < arr.size(); i++)
	{
		if (arr[i] >= n)
		{
			return true;
		}
	}

	return false;
}

int main() {

existsHigher([2,3,4,5,6],3) ;

return 0;
}

jeron1

Вы вызываете метод с параметром [23456], этот параметр не является вектором, ваш компилятор, вероятно, жалуется на эту строку. Вы должны создать вектор, а затем передать его методу, обычно передаваемому по ссылке. что-то вроде;
тап_п()
{
std::vector<int> blah {2,3,4,5,6};

existsHigher(бла, 3);

возвращает 0;
}

где метод выглядит примерно так

боол existsHigher(СТД::вектор&л;int&ГТ;&ампер; модуль arr, int и Н)
{
for (int i = 0; i < arr.size(); i++)
{
// делай свое дело
}
}
Однако многие люди могут использовать итераторы для доступа к элементам вектора.

3 Ответов

Рейтинг:
28

k5054

Ваша главная проблема здесь:

existsHigher([2,3,4,5,6],3);
Выражение [2,3,4,5,6] делает нет определить vector<int>. Если вам нужен временный вектор int, вам нужно будет использовать
existsHigher(vector<int>{2,3,4,5,6},3);
Однако это C++11, поэтому, если ваш компилятор все еще использует C++98, вы должны сначала построить вектор . например:
vector<int> myvect;
for(int i = 2; i <= 7; ++i)
    myvect.push_back(i);


Рейтинг:
1

CPallini

Существует "алгоритм" (any_of) для этого.
Попробуй:

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
  std::vector<int> v{2,3,4,5,6};
  bool exist_higher =  std::any_of( v.begin(), v.end(), [] (int x) {return x>= 3;});
  std::cout << "exist_higher = " << std::boolalpha << exist_higher << std::endl;
}


Stefan_Lang

Интересный. Должно быть, я как-то пропустил эту функцию. Я уже собирался предложить аналогичное решение, используя std::find_if, но это явно лучше.

Рейтинг:
1

KarstenK

// create a vector type for ease of use
typedef std::vector<int> vectorInteger;
//work with reference to avoid creating copies (best for perfomance)
bool existsHigher(const vectorInteger &data, int maximum)
{
  // use iterator
 for(vectorInteger::iterator it = myvector.begin(); it != myvector.end(); ++it)
  {
    if( it > maximum)
      return true;
  }
  return false;
}