How to pass a vector to a function?

C++FunctionVector

C++ Problem Overview


I'm trying to send a vector as an argument to a function and i can't figure out how to make it work. Tried a bunch of different ways but they all give different error messages. I only include part of the code, since it's only this part that doesn't work. (the vector "random" is filled with random, but sorted, values between 0 and 200)

Updated the code:

#include <iostream>		
#include <ctime>		
#include <algorithm>	
#include <vector>		

using namespace std;

int binarySearch(int first, int last, int search4, vector<int>& random);

int main()
{
	vector<int> random(100);
	
	int search4, found;
	int first = 0;
	int last = 99;

	found = binarySearch(first, last, search4, random);

	system("pause");	
	return(0);		
}

int binarySearch(int first, int last, int search4, vector<int>& random)
{
	do
	{
		int mid = (first + last) / 2;  
		if (search4 > random[mid]) 
			first = mid + 1;  
		else if (search4 < random[mid]) 
			last = mid - 1; 
		else
			return mid;     
	} while (first <= last); 

	return -(first + 1);
}

C++ Solutions


Solution 1 - C++

It depends on if you want to pass the vector as a reference or as a pointer (I am disregarding the option of passing it by value as clearly undesirable).

As a reference:

int binarySearch(int first, int last, int search4, vector<int>& random);

vector<int> random(100);
// ...
found = binarySearch(first, last, search4, random);

As a pointer:

int binarySearch(int first, int last, int search4, vector<int>* random);

vector<int> random(100);
// ...
found = binarySearch(first, last, search4, &random);

Inside binarySearch, you will need to use . or -> to access the members of random correspondingly.

Issues with your current code

  1. binarySearch expects a vector<int>*, but you pass in a vector<int> (missing a & before random)
  2. You do not dereference the pointer inside binarySearch before using it (for example, random[mid] should be (*random)[mid]
  3. You are missing using namespace std; after the <include>s
  4. The values you assign to first and last are wrong (should be 0 and 99 instead of random[0] and random[99]

Solution 2 - C++

You'll have to pass the pointer to the vector, not the vector itself. Note the additional '&' here:

found = binarySearch(first, last, search4, &random);

Solution 3 - C++

You're passing in a pointer *random but you're using it like a reference &random

The pointer (what you have) says "This is the address in memory that contains the address of random"

The reference says "This is the address of random"

Solution 4 - C++

Anytime you're tempted to pass a collection (or pointer or reference to one) to a function, ask yourself whether you couldn't pass a couple of iterators instead. Chances are that by doing so, you'll make your function more versatile (e.g., make it trivial to work with data in another type of container when/if needed).

In this case, of course, there's not much point since the standard library already has perfectly good binary searching, but when/if you write something that's not already there, being able to use it on different types of containers is often quite handy.

Solution 5 - C++

found = binarySearch(first, last, search4, &random);

Notice the &.

Solution 6 - C++

You're using the argument as a reference but actually it's a pointer. Change vector<int>* to vector<int>&. And you should really set search4 to something before using it.

Solution 7 - C++

If you use random instead of * random your code not give any error

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionJoeView Question on Stackoverflow
Solution 1 - C++JonView Answer on Stackoverflow
Solution 2 - C++MarioView Answer on Stackoverflow
Solution 3 - C++corsiKaView Answer on Stackoverflow
Solution 4 - C++Jerry CoffinView Answer on Stackoverflow
Solution 5 - C++Daniel A. WhiteView Answer on Stackoverflow
Solution 6 - C++PuppyView Answer on Stackoverflow
Solution 7 - C++Javad YousefiView Answer on Stackoverflow