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

owa*_*als 2 c++ arrays algorithm

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

int array[n];
Run Code Online (Sandbox Code Playgroud)

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

array.slice(array.length - 5, 1)??
Run Code Online (Sandbox Code Playgroud)

Chr*_*phe 6

简而言之

算法将是你的朋友:

int last[5]; 
std::copy(array+n-5, array+n, last); 
Run Code Online (Sandbox Code Playgroud)

更多细节

首先,可变长度数组是不标准的C++.因此,如果n是常量表达式,以下代码只是可移植且有效:

int array[n]; 
Run Code Online (Sandbox Code Playgroud)

所以更好的方法是使用矢量int.优点是它们的大小可以在需要时动态演变:

vector<int> varray(n); 
Run Code Online (Sandbox Code Playgroud)

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

int *array = new int[n];
Run Code Online (Sandbox Code Playgroud)

上面显示了带有原始数组的解决方案.我把它留给你把它推广到k个最后的元素.

矢量变体非常相似:

vector<int> vlast(5);
copy(varray.end()-vlast.size(), varray.end(), vlast.begin()); 
Run Code Online (Sandbox Code Playgroud)

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

注意 - UB的风险:我将你作为一个练习,让两个解决方案的代码适应阵列大小小于5的情况.

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

copy(vlast.begin(), vlast.end(), ostream_iterator<int>(cout," ")); // display
cout<<endl; 
Run Code Online (Sandbox Code Playgroud)

在线演示

还没有被载体说服吗? 然后看看这两个其他的矢量变体:

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