获取5个最后一个数组对象C

Get 5 last array objects C++

本文关键字:对象 数组 最后一个 5个 获取      更新时间:2023-10-16

一个简单的任务,但我不记得C 的语法。

int array[n];

我需要获取数组的最后5个对象。

array.slice(array.length - 5, 1)??

在简称

算法将是您的朋友:

int last[5]; 
std::copy(array+n-5, array+n, last); 

更多详细信息

首先,可变长度阵列不是标准的C 。因此,如果n是恒定的表达式,则以下代码仅是便携式且有效的:

int array[n]; 

因此,更好的方法是使用int的向量。优点是它们的大小可能在需要时动态发展:

vector<int> varray(n); 

如果您真的要使用可变的原始数组,则可以使用内存分配,但这很麻烦,因为您必须采取很多预防措施(例如,最后删除分配的对象):

int *array = new int[n];

上面显示了带有原始数组的解决方案。我将其保留给您以将其推广到k的最后一个元素。

向量变体非常相似:

vector<int> vlast(5);
copy(varray.end()-vlast.size(), varray.end(), vlast.begin()); 

请注意,副本更具动态性,因为元素的数量将取决于输出向量的大小。

注意 - UB 的风险:我将您作为练习,以使两种解决方案的代码适应数组大小小于5的情况。

现在,如果您喜欢算法,那么也值得查看迭代器,因为它们允许您做一些很酷的技巧:

copy(vlast.begin(), vlast.end(), ostream_iterator<int>(cout," ")); // display
cout<<endl; 

在线演示

仍然没有被向量说服吗?

vector<int> vlast2(varray.end()-5, varray.end());  // powerful constructor
vector<int> vlast3(varray.rbegin(), varray.rbegin()+5); // and in reverse order