我有一个矢量 vec 的结构。这样的结构具有元素 int a,int b,int c 。我想从向量中的最后一个结构赋予一些 int var 元素c。请问您能提供这个简单的解决方案吗?我会像这样排成一行:
var = vec.end().c;
答案 0 :(得分:73)
关于获取对向量中最后一个元素的访问权限的问题的直接答案可以使用back()
成员完成。如:
int var = vec.back().c;
注意:如果向量可能为空,则对back()
的调用会导致未定义的行为。在这种情况下,您可以使用back()
成员检查向量的空状态之前以使用empty()
:
if (!vec.empty())
var = vec.back().c;
可能这两种方法中的一种适用于您的需求。
答案 1 :(得分:8)
vec.end()
是一个迭代器,它引用向量中的后端位置。因此,您无法尊重它并访问成员值。 vec.end()
迭代器始终有效,即使在空向量中(在这种情况下为vec.end() == vec.begin()
)
如果要访问向量的最后一个元素,请使用vec.back()
,它返回一个引用(而不是迭代器)。但请注意,如果向量为空,这将导致未定义的行为;很可能是崩溃。
答案 2 :(得分:4)
使用back()
:
var = vec.back().c;
答案 3 :(得分:2)
var = vec.back().c;
就是你想要的。
end()
返回向量的迭代器(不是元素)。 back()
返回对最后一个元素的引用。它也有一个对应的front()
。
答案 4 :(得分:2)
试试这个:var = vec.back().c;
您也可以修改代码,如:
var = vec.rbegin()->c;
在两个版本中,首先确保向量不为空!
答案 5 :(得分:1)
您可以简单地使用back
,因为它会返回对最后一个元素的引用
var = vec.back().c
答案 6 :(得分:0)
您可以使用std:vector<T>:back()
功能,例如vec.back().c
。
见http://www.cplusplus.com/reference/vector/vector/back/