c++ vector último elemento campo


Tengo un vector vec de estructuras. Tal estructura tiene elementos int a, int b, int c. Me gustaría asignar a algunos int var el elemento c, de la última estructura en un vector. Por favor, ¿puede proporcionarme esta solución simple? Voy en círculo en línea de esta manera:

var = vec.end().c;
Author: berndh, 2013-01-11

7 answers

La respuesta inmediata a su pregunta en cuanto a obtener acceso al último elemento en un vector se puede lograr usando el miembro back(). Tales como:

int var = vec.back().c;

Nota: Si existe la posibilidad de que su vector esté vacío, tal llamada a back() causa un comportamiento indefinido. En tales casos, puede verificar el estado vacío de su vector antes de de usar back() utilizando el miembro empty():

if (!vec.empty())
   var = vec.back().c;

Probablemente uno de estos dos métodos será aplicable a sus necesidades.

 64
Author: WhozCraig,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-11 10:28:24

vec.end() es un iterador que se refiere a la ubicación posterior al final en el vector. Como tal, no puede respetarlo y acceder a los valores de los miembros. vec.end() el iterador es siempre válido, incluso en un vector vacío (en cuyo caso vec.end() == vec.begin())

Si desea acceder al último elemento de su vector use vec.back(), que devuelve una referencia (y no un iterador). Sin embargo, tenga en cuenta que si el vector está vacío, esto conducirá a un comportamiento indefinido; lo más probable es un bloqueo.

 8
Author: CygnusX1,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-11 09:44:46

Uso back():

var = vec.back().c;
 4
Author: Veger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-09-12 19:48:48

var = vec.back().c; es lo que quieres.

end() devuelve el iterador (no un elemento) pasado el final del vector. back() devuelve una referencia al último elemento. Tiene una contraparte front() también.

 2
Author: Chowlett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-11 09:40:56

Prueba esto: var = vec.back().c;

También puede modificar su código como:

var = vec.rbegin()->c;

En ambas versiones primero asegúrese de que el vector no está vacío!

 2
Author: Ivaylo Strandjev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-11 09:41:25

Simplemente puede usar back ya que devuelve una referencia al último elemento.
var = vec.back().c

 1
Author: mkaes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-11 09:41:47

Puede usar la función std:vector<T>:back(), por ejemplo vec.back().c. Véase http://www.cplusplus.com/reference/vector/vector/back /

 0
Author: Lars,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-11 09:42:45