怎么取得一个数组中的倒数第二个元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么取得一个数组中的倒数第二个元素相关的知识,希望对你有一定的参考价值。

参考技术A 基本上就你的这两种方法了,
至于效率的问题,上面的答案看起来都有一定的道理,但到底哪一个对呢?或者都对?实践是检验真理的标准。测试一下就知道了。
#include <iostream>
#include <iomanip>
#include <Windows.h>
#include <vector>
#include <functional>
using namespace std;
int getbyindex(vector<int>& v)

//int n = v.size();
return v[v.size()-2];

int getbyit(vector<int>& v)

return *(v.end()-2);

double calltime(function<int(vector<int>&)> f,vector<int>& v)

LARGE_INTEGER start;
if (::QueryPerformanceCounter(&start) == FALSE)
throw "foo";

f(v);

LARGE_INTEGER end;
if (::QueryPerformanceCounter(&end) == FALSE)
throw "foo";
return static_cast<double>(end.QuadPart - start.QuadPart);

int main()

vector<int> v;
for(int i = 0;i<100;++i)

v.push_back(rand());

double t = calltime(getbyindex,v);
cout<<setprecision(10)<<t<<endl;
return 0;


大致的测试结果是,getbyindex要快一些。对于vector容器而言,采用index的方法,更加接近其实现底层——数组——的本质,自然有更快的理由。
参考技术B 取从后数第二个元素;或者取数组元素个数函数,再取第(此函数-1)个元素也可以。本回答被提问者采纳

slice()方法:截取数组中的元素

作用:

slice() 方法可从已有的数组中返回选定的元素。
slice()方法可提取字符串的某个部分,并以新的字符串返回被提取的部分。

语法:

array.slice(start, end)
  • start,可选。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
  • end, 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。

注意:

slice() 不会改变原始数组。

实例:

let ages = [33,44,55,66,77]; 
ages.slice(1,3)
//打印结果[44,55]
ages.slice(-3,-1)
//打印结果[55,66]
ages.slice(-3)
//打印结果[55,66,77]

拓展:

let str="www.runoob.com!";
document.write(str.slice(4)+"<br>"); // 从第 5 个字符开始截取到末尾:runoob.com!
document.write(str.slice(4,10)); // 从第 5 个字符开始截取到第10个字符:runoob
document.write(str.slice())//复制:www.runoob.com!

以上是关于怎么取得一个数组中的倒数第二个元素的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 从对象数组中查询倒数第二个项目

为啥倒数第二个值被复制到数组的最后一个值上[重复]

slice()方法:截取数组中的元素

c语言数组内元素相加?

java数组算法例题(冒泡排序,选择排序,找最大值最小值,添加删除元素等)

java数组算法例题(冒泡排序,选择排序,找最大值最小值,添加删除元素等)