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)
算法将是你的朋友:
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)