【发布时间】:2012-12-25 20:46:32
【问题描述】:
我有一个结构向量 vec。这样的结构有元素int a, int b, int c。我想从向量中的最后一个结构中将元素 c 分配给一些 int var。请问你能给我这个简单的解决方案吗?我会这样排成一排:
var = vec.end().c;
【问题讨论】:
-
只是另一种不花哨的方法:
var=v[v.size() - 1];必须检查向量是否不为空。
我有一个结构向量 vec。这样的结构有元素int a, int b, int c。我想从向量中的最后一个结构中将元素 c 分配给一些 int var。请问你能给我这个简单的解决方案吗?我会这样排成一排:
var = vec.end().c;
【问题讨论】:
var=v[v.size() - 1]; 必须检查向量是否不为空。
使用back() 成员可以立即回答有关获取对向量中最后一个元素的访问权的问题。如:
int var = vec.back().c;
注意:如果您的向量可能为空,则对 back() 的此类调用会导致未定义的行为。在这种情况下,您可以使用empty() 成员在使用back() 之前检查向量的空状态:
if (!vec.empty())
var = vec.back().c;
这两种方法中的一种可能适用于您的需求。
【讨论】:
vec.back(),但向他解释它仅适用于非空向量,如果他在代码的这一点上不确定向量的这种状态,则需要检查vec.empty() .
std::vector::emptys。就像说的那样,答案可以用更具防御性的措辞来表达。但是好吧,这是你的决定,当然。
vec.end() 是一个迭代器,它引用向量中的末尾位置。因此,您不能尊重它并访问成员值。 vec.end() 迭代器始终有效,即使在空向量中(在这种情况下 vec.end() == vec.begin())
如果您想访问向量的最后一个元素,请使用vec.back(),它返回一个引用(而不是迭代器)。但是请注意,如果向量为空,这将导致未定义的行为;很可能是崩溃。
【讨论】:
使用back():
var = vec.back().c;
【讨论】:
var = vec.back().c; 是你想要的。
end() 在向量的末尾返回迭代器(不是元素)。 back() 返回对最后一个元素的引用。它也有对应的 front()。
【讨论】:
试试这个:var = vec.back().c;
你也可以修改你的代码:
var = vec.rbegin()->c;
在这两个版本中,首先确保向量不为空!
【讨论】:
vec.end() 已经结束,所以*vec.end() 无效。
back。
prev 只需使用 rbegin。
您可以简单地使用back,因为它返回对最后一个元素的引用。var = vec.back().c
【讨论】:
您可以使用std:vector<T>:back() 函数,例如vec.back().c。
见http://www.cplusplus.com/reference/vector/vector/back/
【讨论】: