Comment puis-je vérifier si une valeur est contenue dans un vecteur? C++
J'ai un vecteur que je suis en train d'effectuer une contient la fonction. Je reçois une sorte d'erreur de casting, et je ne peux pas rassembler une solution. Je suis également désireux de savoir si oui ou non ce que je fais est le moyen le plus approprié pour vérifier si un vecteur contient une valeur.
Voici le code:
#include "stdafx.h"
#include <vector>
static void someFunc(double** Y, int length);
static bool contains(double value, std::vector<double> vec);
int main()
{
double doubleArray[] = { 1, 2, 3, 4, 5 };
double *pDoubleArray = doubleArray;
int size = sizeof doubleArray / sizeof doubleArray[0];
someFunc(&pDoubleArray, size);
return 0;
}
static void someFunc(double** Y, int length)
{
std::vector<double> vec();
for(int i = 0; i < 10; i++)
{
//error: 'contains' : cannot convert parameter 2 from 'std::vector<_Ty> (__cdecl *)(void)' to 'std::vector<_Ty>'
if(contains(*(Y[i]), vec))
{
//do something
}
}
}
static bool contains(double value, std::vector<double> vec)
{
for(int i = 0; i < vec.size(); i++)
{
if(vec[i] == value)
{
return true;
}
}
return false;
}
Vous devez vous connecter pour publier un commentaire.
Lorsque vous déclarez une variable, c'est le constructeur par défaut, vous ne mettez pas de
()
après cela (même si cela est facultatif lorsque vous utiliseznew
pour allouer de l'espace libre sur le store). Donc cette ligne:devrait devenir
Si vous le laissez comme vous l'avez fait, il pense que la ligne est une fonction prototype d'une fonction appelée
vec
prenant aucun paramètre et retournant unstd::vector<double>
, qui est pourquoi vous obtenez une erreur du compilateur.Et oui, votre code pour trouver un élément de travail (on appelle ça un linéaire de recherche). Aussi, si vous le souhaitez, vous pouvez utiliser
std::find
:Si votre vecteur est dans l'ordre de tri, vous pouvez également utiliser
binary_search
qui est beaucoup plus rapide quefind
, et l'utilisation est la même saufbinary_search
renvoie unebool
au lieu d'un itérateur (si vous n'avez pas besoin de la tester contrevec.end()
). Assurez-vous d'inclure lesalgorithm
en-tête si vous utilisez l'un de ces.!= vec.end()
est làBizarrement, cela ne pas déclarer un
vector
en utilisant le constructeur par défaut. Il déclare une fonction prenant aucun argument et retournant unvector
. Essayez plutôt ceci:Vous pouvez utiliser std::find pour vérifier STL discbased contenir une certaine valeur.