stoi not float ejemplos declared convertir c++ find const stl-algorithm

not - string to float c++



El método C++ Find no es const? (4)

Copié tu implementación y no tuve problemas con ella:

class ClassA { vector<int> myList; public: bool MethodA(int x) const; }; bool ClassA::MethodA(int x) const { bool y = false; if (find(myList.begin(), myList.end(), x) != myList.end()) y = true; return y; }

Cuando intentó hacer la definición del método (lo que publicó anteriormente) const, ¿recordó también cambiar la declaración del método?

He escrito un método que me gustaría declarar como const, pero el compilador se queja. Seguí y descubrí que esta parte del método estaba causando la dificultad:

bool ClassA::MethodA(int x) { bool y = false; if(find(myList.begin(), myList.end(), x) != myList.end()) { y = true; } return y; }

Hay más cosas sucediendo en el método que eso, pero con todo lo demás eliminado, esta era la parte que no permitía que el método fuera const. ¿Por qué el algoritmo stl find evita que el método sea const? ¿Cambia la lista de alguna manera?


Funciona bien para mí (i686-apple-darwin10-g ++ - 4.2.1 (GCC) 4.2.1 (Apple Inc. compilación 5646)):

#include <list> #include <algorithm> class ClassA { public: ClassA() { myList.push_back(1); myList.push_back(2); } bool MethodA(int x) const; private: std::list<int> myList; }; bool ClassA::MethodA(int x) const { bool y = false; if(find(myList.begin(), myList.end(), x) != myList.end()) { y = true; } return y; } int main( int argc, char** argv ) { ClassA a; a.MethodA(5); return 0; }


Publique un programa completo que no compila. Esto compila bien:

#include <list> #include <algorithm> #include <iostream> struct Foo { std::list<int> ml; bool search(int x) const { return std::find(ml.begin(), ml.end(), x) != ml.end(); } }; int main() { const Foo f; std::cout << f.search(0) << "/n"; }

Quizás find no está llamando a la función que crees que es [Edit: más probable, tonto, myList no es una std::list ]. Reducir a un programa pequeño que demuestre el problema probablemente revelará la causa, porque en algún momento eliminará algo y comenzará a funcionar.


Si myList es un objeto de un tipo de contenedor personalizado, podría tener un problema si sus métodos begin () y end () no tienen una sobrecarga const. Además, suponiendo que el tipo de x no es realmente int en su código, ¿está seguro de que hay un operador de igualdad que puede operar en un miembro de ese tipo?