❶ cpp遍历数组的几种方式
c++中遍历数组常用两种方法:
使用下标
for(int i = 0; i< LengthOfClass; i++) {//class[i]就是第数组i+1个元素};
使用指针
for(type *p = class;p!= LastOfClass; p++) {//p直接指向数组元素};
数组是在程序设计中为了处理方便,把具有相同类型的若干变量按有序的形式组织起来的一种形式。数组把有限个类型相同的变量用一个名字命名,然后用编号进行区分。这些按序排列的同类数据元素的集合称为数组。数组的名字称为数组名,编号称为下标。组成数组的各个变量称为数组的元素或者下标变量。
❷ java 如何遍历数组里面的数据
二维数组定义:数据类型[][] 数组名 = new 数据类型[二维数组行数][二维数组列数]
如:int[] array = new int[5][4];
二维数组的遍历:需要使用两个变量来分别遍历行和列,具体遍历方法就很多啦,可以使用while语句、do-while语句、for语句,也可以相互结合使用。
如:
inti=0,j=0;
for(inti=0;i<array.length;i++){
for(intj=0;j<array[i].length;j++){
System.out.println(array[i][j]+"、");
}
System.out.println("");
}
❸ 如何从左到右和从右到左遍历数组
#include <iostream>
#include <iterator>
#include <algorithm>
size_t gcd(size_t m, size_t n)
{
return n==0 ? m : gcd(n, m % n);
}
void rotate(int *arr, size_t n, int k) // n:数组长度, k:右移位数
{
size_t d = gcd(n, (k>0 ? k: -k)); // 获得n和|k|的最大公约数
for (size_t i = 0; i < d; i++)
{
int tmp = arr[i];
size_t prev_pos = i;
size_t cur_pos = prev_pos;
while ((prev_pos = (prev_pos+n-k)%n) != i)
{
arr[cur_pos] = arr[prev_pos];
cur_pos = prev_pos;
}
arr[cur_pos] = tmp;
}
}
// 测试代码
int main()
{
using std::;
using std::ostream_iterator;
using std::cout;
using std::endl;
const size_t SIZE = 18;
const int RIGHT = 12;
int arr[SIZE];
for (int i = 0; i < SIZE; i++)
arr[i] = i;
rotate(arr, SIZE, RIGHT);
(arr, arr+SIZE, ostream_iterator<int>(cout, " "));
system("pause");
}
对于可随机访问的数组,有比三次convert更快的算法,如上所示(STL中对Random Access Iterator即使用此算法).
LZ的算法与此相同,只不过不需要check.数学上可以证明只要循环gcd(n,k)次就可遍历所有元素恰好一次.
该算法的时间复杂度为n+gcd(n,k),即每个数组元素恰好赋值一次,每个循环需有一次临时变量的赋值.
❹ Java数组遍历
因为是随机生成的数组,所以可能数组中没有小于10的数字,这时处理后的数组和之前一样看不到效果。多试几次就好了。
importjava.util.Random;
publicclassDemo{
publicstaticvoidmain(String[]args){
Randomrandom=newRandom();
int[]arr=newint[5];
for(inti=0;i<arr.length;i++){
arr[i]=random.nextInt(46)+5;
}
System.out.print("随机生成的数组:");
printArr(arr);
arr=getNewArr(arr);
System.out.print("处理之后的数组:");
printArr(arr);
}
privatestaticint[]getNewArr(int[]arr){
for(inti=0;i<arr.length;i++){
if(arr[i]<10){
arr[i]=0;
}
}
returnarr;
}
privatestaticvoidprintArr(int[]arr){
for(inti:arr){
System.out.print(i+"");
}
System.out.println();
}
}
❺ js数组遍历的常用的几种方法以及差异和性能优化
<script type="text/javascript">
/*对比:
1、map速度比foreach快
2、map会返回一个新数组,不对原数组产生影响,foreach不会产生新数组,foreach返回undefined
3、map因为返回数组所以可以链式操作,foreach不能
4, map里可以用return ,而foreach里用return不起作用,foreach不能用break,会直接报错*/
/*方法一:*/
var arr1 = [1, 2, 3, 4, 5, 6];
for(var i = 0, len = arr1.length; i < len; i++) { //优化性能处理
console.log(arr1[i], 'for遍历出来的数据'); //每个item 1,2,3,4,5,6
}
/*方法二:*/
/*forEach方法中的function回调支持3个参数,第1个是遍历的数组内容;第2个是对应的数组索引,第3个是数组本身*/
var arr2 = [{
name: 'bob',
age: 20
},
{
name: 'tom',
age: 18
},
{
name: 'sos',
age: 19
}
]
arr2.forEach((val, i) => { //没有返回值的,对原来数组也没有影响
console.log(val, '遍历出来的每个obj')
});
/*方法三:*/
var fruits = [1, 2, 3, 4, 5, 6, 7, 8];
let arr = fruits.map((item, index) => {
console.log(item, 'top')
console.log(index, 'top')
return item * 8
})
console.log(arr, 'newarr') //[8, 16, 24, 32, 40, 48, 56, 64] "newarr"
var a = fruits.indexOf("Apple", 4);
console.log(a)
//for 和 forEach都是普通循环,map 带返回值并且返回一个新数组;
/*
*当前元素的值,当期元素的索引值,当期元素属于的数组对象;
语法:array.map(function(currentValue,index,arr), thisValue)
map() 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
map() 方法按照原始数组元素顺序依次处理元素。
注意: map() 不会对空数组进行检测。
注意: map() 不会改变原始数组。
* */
/*方法四:*/
/*兼容写法:
不管是forEach还是map在IE6 - 8 下都不兼容( 不兼容的情况下在Array.prototype上没有这两个方法), 那么需要我们自己封装一个都兼容的方法:*/
/**
* forEach遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myForEach = function myForEach(callback, context) {
context = context || window;
if('forEach' in Array.prototye) {
this.forEach(callback, context);
return;
}
//IE6-8下自己编写回调函数执行的逻辑
for(var i = 0, len = this.length; i < len; i++) {
callback && callback.call(context, this[i], i, this);
}
}
/**
* map遍历数组
* @param callback [function] 回调函数;
* @param context [object] 上下文;
*/
Array.prototype.myMap = function myMap(callback, context) {
context = context || window;
if('map' in Array.prototye) {
return this.map(callback, context);
}
//IE6-8下自己编写回调函数执行的逻辑var newAry = [];
for(var i = 0, len = this.length; i < len; i++) {
if(typeof callback === 'function') {
var val = callback.call(context, this[i], i, this);
newAry[newAry.length] = val;
}
}
return newAry;
}
</script>
❻ JAVA如何遍历数组
int[] is = new int[1,12,4,546]
for(int i=0; i<is.length; i++){
System.out.println(int[i] + "");
}
这就是一个最简单的遍历数组,遍历数组通俗点就是说把数组中的每个数都读一遍(部分有if条件+break的则可能不会完全遍历),你可以对于数组中的每个数进行处理,亦或者是找到数组中那个你需要的数。
❼ JS几种数组遍历方式总结
concat()连接两个或更多的数组,并返回结果。
join()把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
pop()删除并返回数组的最后一个元素
push()向数组的末尾添加一个或更多元素,并返回新的长度。
reverse()颠倒数组中元素的顺序。
shift()删除并返回数组的第一个元素。
slice()从某个已有的数组返回选定的元素等等。
❽ C语言的遍历算法
思路1:
写出所有24种4个数的排列,存到一个数组里,假如数组是P[24][4];
那么可以
for
(i
=
0;
i
<
24;
i++)
for
(j
=
0;
j
<
24;
j++)
for
(k
=
0;
k
<
24;
k++)
三层循环,P[i],P[j],P[k]分别是矩阵的三个列
思路2:
利用dfs递归枚举
int
used[3][4];/*这个数组存放三个列中0~3这四个数是否已在这一列中出现过,需要提前清零*/
int
mat[3][4];/*要枚举的矩阵*/
void
dfs(int
col,
int
row)/*col表示现在已经搜索到哪一列(从0开始编号),row表示这一列已经填了几行*/
{
int
i;
if
(col
==
2
&&
row
==
4)
{
....../*运行到这里的时候,mat就是枚举到的一个矩阵*/
return;
}
if
(row
==
4)
{row
=
0;
col++;}
for
(i
=
0;
i
<
4;
i++)
if
(!used[col][i])
{
used[col][i]
=
1;
mat[col][row]
=
i;
dfs(col,
row
+
1);
used[col][i]
=
0;
}
return;
}
调用的时候调用dfs(0,0)
❾ 什么叫遍历算法(最好有例子)
遍历算法:所谓遍历(Traversal),是指沿着某条搜索路线,依次对树中每个结点均做一次且仅做一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一,是二叉树上进行其它运算之基础。当然遍历的概念也适合于多元素集合的情况,如数组。
遍历算法概念延伸:
图遍历:图遍历又称图的遍历,属于数据结构中的内容。指的是从图中的任一顶点出发,对图中的所有顶点访问一次且只访问一次。图的遍历操作和树的遍历操作功能相似。图的遍历是图的一种基本操作,图的许多其它操作都是建立在遍历操作的基础之上。
举例:
遍历二叉树搜索路线:
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:⑴访问结点本身(N),⑵遍历该结点的左子树(L),⑶遍历该结点的右子树(R)。以上三种操作有六种执行次序:NLR、LNR、LRN、NRL、RNL、RLN。前三种次序与后三种次序对称。
遍历二叉树的执行踪迹三种递归遍历算法的搜索路线相同(如下图虚线所示)。具体线路为:从根结点出发,逆时针沿着二叉树外缘移动,对每个结点均途径三次,最后回到根结点。