63

我有一个结构的向量vec。这样的结构有元素int a, int b, int c。我想int var从向量中的最后一个结构中分配一些元素 c。请问你能给我这个简单的解决方案吗?我要像这样排成一行:

var = vec.end().c;
4

8 回答 8

110

关于获取对向量中最后一个元素的访问权的问题的直接答案可以使用back()成员来完成。如:

int var = vec.back().c;

注意:如果您的向量可能为空,则此类调用会back()导致未定义的行为。在这种情况下,您可以使用成员在使用之前检查向量的空状态:back()empty()

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

这两种方法中的一种可能适用于您的需求。

于 2013-01-11T09:45:35.203 回答
14

vec.end()是一个迭代器,它引用向量中的末尾位置。因此,您不能尊重它并访问成员值。vec.end()迭代器始终有效,即使在空向量中(在这种情况下vec.end() == vec.begin()

如果要访问向量的最后一个元素,请使用vec.back(),它返回一个引用(而不是迭代器)。但是请注意,如果向量为空,这将导致未定义的行为;很可能是崩溃。

于 2013-01-11T09:44:46.090 回答
6

使用back()

var = vec.back().c;
于 2013-01-11T09:40:39.000 回答
3

试试这个:var = vec.back().c;

您也可以修改您的代码,例如:

var = vec.rbegin()->c;

在这两个版本中,首先确保向量不为空!

于 2013-01-11T09:41:25.940 回答
2

var = vec.back().c;是你想要的。

end()返回向量末尾的迭代器(不是元素)。back()返回对最后一个元素的引用。它也有对应front()的。

于 2013-01-11T09:40:56.183 回答
1

您可以简单地使用back,因为它返回对最后一个元素的引用。
var = vec.back().c

于 2013-01-11T09:41:47.163 回答
0

您可以使用该std:vector<T>:back()功能,例如vec.back().c。见http://www.cplusplus.com/reference/vector/vector/back/

于 2013-01-11T09:42:45.817 回答
0

以下代码适用于我。

int var;
var =  *(std::end(bar)-1);
std::cout<<var<<std::endl;
于 2022-01-27T05:02:28.280 回答