获取5个最后一个数组对象C
Get 5 last array objects C++
一个简单的任务,但我不记得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
相关文章:
- 将对象数组的引用传递给函数
- 如何使用Visual Studio 2017在C++中为参数化对象数组使用唯一指针
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 类对象数组的问题会导致崩溃
- Arduino C++在构造函数中用参数声明对象数组
- 使用对象数组对 SFML 进行动画处理
- C++ 对象数组堆栈溢出
- 如何将对象数组作为参数传递给模板
- 使用向量初始化参数化构造函数的对象数组
- 如何初始化对象数组?
- C++创建对象数组
- 在对象数组中搜索字符串并返回相应值的函数
- 有没有办法使用该类的构造函数初始化另一个类的私有部分内的对象数组?
- 如何在运行时在对象数组中动态追加新对象C++并打印它们
- 为什么我在声明对象数组时不能使用 -> 运算符?
- 编译时生成应在构造函数中创建的非 constexpr 对象数组
- 使用 C++ 创建对象数组
- 对象数组打印空白字符串
- 重载运算符 [] 用于从对象数组中给出特定索引
- 如何在 C++ 中使用提升属性树从 JSON 文件中读取对象数组