Cómo crear una clase para todos los bucles for en main() (solo para reducir el código en la función principal)

For loop itera a través del vector y muestra todas las cadenas en la consola con éxito:

int main(int argc, const char * argv[])
{
    vector<string>stringVector;
    string newStringEntry;

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    for (vector<string>::iterator i = stringVector.begin(); i != stringVector.end(); ++i) 
    {
        cout<<*i<<endl;
    }
}

Pero esto hace que el código sea difícil de leer (dijo nuestro maestro) ahora tenemos que construir una clase para el ciclo for y el main debería verse así después del cambio:

int main(int argc, const char * argv[])
{
    vector<string>stringVector;
    string newStringEntry;

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    cin>>newStringEntry;
    stringVector.push_back(newStringEntry);

    showStrings();
}

El problema que veo es que no puedo simplemente copiar y pegar el bucle for en una clase propia porque el nombre del vector que declaro en el main no se conoce en la clase, por lo que aparece un error.

¿Cómo puedo hacer que esto funcione?

Mi clase hasta ahora se ve así:

class VectorHelp {
    void showStrings() const 
    {
        for (vector<string>::iterator i = vectorName.begin();
                i != vectorName.end();
                ++i)
        {
            cout << *i << endl;
        }
    }
};

preguntado el 04 de julio de 12 a las 10:07

Dudo que el main Se supone que el bucle debe verse como lo mostraste después de la oportunidad, ya que eso simplemente no funciona. Además, esto no usa ninguna clase en absoluto. -

¿Está seguro de que la función (showStrings) no tiene parámetros? -

Este es un caso de no entender el alcance de la variable... ¿entiendes por qué stringVector no está disponible fuera de main? ¿Qué formas podría tener para llevarlo a su clase? -

Sí, entiendo, stringVector se declara en el principal y no se puede conocer en la clase VectorHelp.h. Así que tengo que pasar el stringVector como parámetro al método showStrings de la clase VectorHelp. Intentaré eso. Gracias. -

¿Tu profesor de C++ no enseña también Java, por casualidad? En C++, las funciones no necesitan ser parte de ninguna clase. No me parece ningún beneficio aquí de definir una clase. Tal vez el beneficio se manifieste más tarde, cuando pongas un addString funcionar en su clase, así como showStrings, y hacer stringVector un miembro de datos de la clase en lugar de una variable en main. Una vez hecho esto, podrías tener showStrings no tome parámetros. -

3 Respuestas

Debe almacenar su vector en su clase o pasarlo a su función.

Respondido 04 Jul 12, 10:07

Pásalo a la función es más lo que quiero. Gracias. - usuario1010563

Tienes que pasar tu vector<strings> como herramienta de edición del parámetro de método:

VectorHelp::showStrings(stringVector);

...

static void showStrings(const vector<string>& stringVector)

Tenga en cuenta que el nombre de su parámetro formal y real no necesita ser el mismo. También tenga en cuenta que showStrings debe ser una función miembro de clase (es decir, static), no una función miembro de instancia.

Finalmente, tenga en cuenta que la impresión sin bucles se puede realizar utilizando las funciones de la biblioteca estándar de C++:

ostream_iterator<string> out_it (cout, "\n");
copy (stringVector.begin(), stringVector.end(), out_it);

Respondido 04 Jul 12, 11:07

Apuesto a que te refieres a algo como esto:

class VectorHelp
{
    private:
         std::vector<std::string> stringVector

    public:

    void add(const string& str)
    {
        stringVector.push_back(str);
    }

    void printStrings()
    {
        for (vector<string>::iterator i = stringVector.begin(); i != stringVector.end(); i++)
        {
            cout << *i << endl;
        }
    }

}

Sin embargo, no estoy seguro de si el ciclo for que proporcionó es el correcto, realmente no uso iteradores y más bien solo uso índices.

¡Pero la clase anterior es una clase que puede crear y agregar cadenas para imprimirlas más tarde!

Respondido 04 Jul 12, 11:07

Gracias Christian, esto es muy útil. - usuario1010563

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.