我有一个结构体向量vec,其中每个结构体有元素int a, int b, int c
。我想将最后一个结构体中的元素c赋值给某个int var
。请提供一个简单的解决方案,我正在困扰于这个问题。
var = vec.end().c;
如果您想要访问向量中的最后一个元素,则可以使用back()
成员函数来实现。例如:
int var = vec.back().c;
注意:如果有可能您的向量为空,则调用back()
将导致未定义的行为。在这种情况下,您可以通过使用empty()
成员在使用back()
之前检查向量的空状态:
if (!vec.empty())
var = vec.back().c;
很可能这两种方法之一适用于您的需求。
vec.back()
,但要向他解释它仅适用于非空向量,并且如果他不确定代码此时向量的状态,那么需要检查vec.empty()
。 - Christian Rauvec.end()
是指向vector中末尾位置的迭代器。因此,您无法对其进行解引用并访问成员值。即使在空vector中(在这种情况下vec.end() == vec.begin()
),vec.end()
迭代器始终有效。
如果要访问您的vector的最后一个元素,请使用vec.back()
,它返回一个引用(而不是迭代器)。请注意,如果vector为空,则会导致未定义的行为;最有可能是崩溃。
var = vec.back().c;
此外,您可以修改您的代码,如下:var = vec.rbegin()->c;
在两个版本中,首先确保该向量不为空!
vec.end()
已经超出了末尾,所以 *vec.end()
是无效的。 - Chowlettback
不等价。 - pmrprev
,直接使用 rbegin
即可。 - Ivaylo Strandjevvar = vec.back().c;
是你想要的。
end()
返回 vector 的末尾迭代器(不是最后一个元素)。back()
返回最后一个元素的引用。它的相对应函数是front()
。
您可以直接使用back
,因为它会返回对最后一个元素的引用。
var = vec.back().c
以下代码对我有效。
int var;
var = *(std::end(bar)-1);
std::cout<<var<<std::endl;
std:vector<T>:back()
函数,例如 vec.back().c
。
请参见 http://www.cplusplus.com/reference/vector/vector/back/。
var=v[v.size() - 1];
必须检查向量是否为空。 - ani627*vec.rbegin()
- Michael Pacheco