C++ Vectors: Finding Values in vectors

  • Context: C/C++ 
  • Thread starter Thread starter needOfHelpCMath
  • Start date Start date
  • Tags Tags
    C++ Vectors
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
3 replies · 7K views
needOfHelpCMath
Messages
70
Reaction score
0
I would like some help or guide to if i am going on the right track on my program ***Set numMatches to the number of elements in userValues (having NUM_VALS elements) that equal matchValue. Ex: If matchValue = 2 and userValues = {2, 2, 1, 2}, then numMatches = 3. ***
Code:
#include <iostream>
#include <vector>
using namespace std;

int main() {
   const int NUM_VALS = 4;
   vector<int> userValues(NUM_VALS);
   int i = 0;
   int matchValue = 0;
   int numMatches = -99; // Assign numMatches with 0 before your for loop

   userValues.at(0) = 2;
   userValues.at(1) = 2;
   userValues.at(2) = 1;
   userValues.at(3) = 2;

   matchValue = 2;

   numMatches= userValues.at(0);
   for (i = 0; i < NUM_VALS; ++i) 
   {
     cin >> userValues.at(i);
   }
         
   for (i = 0; i < NUM_VALS; ++i) {
      numMatches = numMatches + userValues.at(i);
   }
   

   cout << "matchValue: " << matchValue << ", numMatches: " << numMatches << endl;

   return 0;
}

**MY TEST**

Testing matchValue = 2,
userValues = {2, 2, 1, 2}
Expected value: 3
Your value: 9
 
Physics news on Phys.org
You want something like:

Code:
numMatches= 0;
for (i = 0; i < NUM_VALS; i++) 
{
	if (userValues.at(i) == matchValue)
	{
		numMatches++;
	}
}

You see, in your code, you first assign the value of [m]userValues.at(0)[/m] to [m]numMatches[/m], which is 2, and then in your second for loop, you add each of the values in the array to [m]numMatches[/m], so you wind up with:

[m]numMatches = 2 + 2 + 2 + 1 + 2 = 9[/m]

As you can see in the code I wrote, we initialize [m]numMatches[/m] to zero before the loop, and then we check each element of the array to see if it is equal to [m]matchValue[/m], and if it is, then we increment [m]numMatches[/m], so that we get a count of the number of elements that match.

Does this make sense?
 
MarkFL said:
You want something like:

Code:
numMatches= 0;
for (i = 0; i < NUM_VALS; i++) 
{
	if (userValues.at(i) == matchValue)
	{
		numMatches++;
	}
}

You see, in your code, you first assign the value of [m]userValues.at(0)[/m] to [m]numMatches[/m], which is 2, and then in your second for loop, you add each of the values in the array to [m]numMatches[/m], so you wind up with:

[m]numMatches = 2 + 2 + 2 + 1 + 2 = 9[/m]

As you can see in the code I wrote, we initialize [m]numMatches[/m] to zero before the loop, and then we check each element of the array to see if it is equal to [m]matchValue[/m], and if it is, then we increment [m]numMatches[/m], so that we get a count of the number of elements that match.

Does this make sense?

Yes! it does! I am so horrible at understanding what the programs wants...any tips for me so that i can understand what the programs wants. Thank you it made a lot of sense!
 
Understanding the expected output, and how to get it generally comes with practice. Coding can be extremely rewarding, and it can be extremely frustrating at the same time. :)