Acabo de leer en el estándar C++ que std::for_each
es una operación de secuencia no modificante, junto con find
, search
y así sucesivamente. ¿Eso significa que la función aplicada a cada elemento no debería modificarlos? ¿Porqué es eso? ¿Qué podría salir mal?¿Por qué std :: for_each es una operación de secuencia no modificante?
Aquí hay un código de muestra, donde se modifica la secuencia. ¿Puedes ver algo mal con eso?
void foo(int & i)
{
i = 12;
}
int main()
{
std::vector<int> v;
v.push_back(0);
std::for_each(v.begin(), v.end(), foo);
// v now contains 12
}
Sospecho que esto es solo un problema de interpretación, pero quería opinar sobre eso.
PD: Sé que podría usar std::transform
en lugar de for_each
, pero ese no es el punto.
Sí, acabo de encontrar la misma lista de problemas. Como suponía, era solo una cuestión de interpretación (pero realmente creo que deberían agregar esta nota aclaratoria). –
sí, yo también pienso. todavía no está en n2800. veamos qué contiene el próximo borrador. como la nota tiene el estado de CD1, es bastante extraño que ya no esté :) sospecho que lo eliminaron porque quieren elaborar un concepto para ello. –
¡Buen hallazgo! En particular, tenga en cuenta esto en el informe de defectos: "El documento STL original de Stepanov y Lee prohibía explícitamente que el objeto de función modificara su argumento". No estaba enterado de eso. –