C++ 에서 사용하던 for문을 간략하게 쓸 수 있는 기법 enhanced for문
vector<int> arr;
int arr2[200];
for(auto r:arr){
cout<<r<<" "; //값을 복사해서 가져옵니다
}
for(auto r:arr2){
cout<<r<<" ";
}
#include<bits/stdc++.h>
#define FAST ios_base::sync_with_stdio(false),cin.tie(NULL);
#define mset(v) memset(v,0,sizeof(v));
#define rep(i,a) for(int i=0;i<a;++i)
#define REP(i,a) for(int i=1;i<=a;++i)
using namespace std;
typedef long long ll;
typedef pair<int, int> pi;
typedef tuple<int, int, int>ti;
typedef vector<int> vi;
typedef vector<vector<int>> vvi;
int main() {
FAST;
vi a = vi{ 1,2,3,4,5 };
for (int &r : a) { //참조값을 이용해 값을 수정할 수도 있습니다
r = 5;
}
for (int r : a) {
cout << r << " ";
}
/출력 : 5 5 5 5 5
}
array 뿐만아니라 vector,map,set 같은 std에서도 사용가능하다.
java에서도 그대로 사용가능
int[] ar={1,2,3,4,5};
for(int e:ar){
System.out.println(e);
}
주의할 점이 있다!
package Devide_And_Conquer;
public class Main {
public static void main(String args[]) {
Box[] BoxArray=new Box[5];
BoxArray[0]=new Box(1);
BoxArray[1]=new Box(2);
BoxArray[2]=new Box(3);
BoxArray[3]=new Box(4);
BoxArray[4]=new Box(5);
for(Box box:BoxArray) { //box 에는 BOXArray요소의 참조변수가 담겼다
box.setnum(100);
}
for(Box box:BoxArray) {
System.out.println(box.getnum());
//100 100 100 100 100
}
int[] IntArray=new int[5];
IntArray[0]=1;
IntArray[1]=2;
IntArray[2]=3;
IntArray[3]=4;
IntArray[4]=5;
for(int i:IntArray) { //i에는 IntArray의 요소가 담겼다!
i=100;
//System.out.println(i);
}
for(int r:IntArray) {
System.out.println(r);
//1 2 3 4 5
}
}
}
배열이 인스턴스의 참조값을 담고있다면, 즉 레퍼런스를 담고있다면
enhanced for문에서 box는 인스턴스의 참조값이 들어간다
마치 c++의 레퍼런스 &와 같은느낌
하지만 배열이 int형같은 기본 자료형의 값이 들어간다면
i에는 레퍼런스가 아닌 값 그 자체가 들어간다 따라서 i값이 수정되어도 IntArray값은 변화가 없다
'java' 카테고리의 다른 글
interface 정리 (0) | 2024.03.11 |
---|---|
super ? 상속의 규칙 (0) | 2024.03.08 |
배열의 초기화 (0) | 2024.03.08 |
클래스 변수,메소드 와 인스턴스 변수,메소드의 차이? (0) | 2024.03.07 |
Short-Circuit Evaluation (0) | 2024.03.06 |