본문 바로가기
컴퓨터/알고리즘:자료구조

[자료구조] c++ 배열(STL Array)의 각종 사용 방법/동적 할당, 함수 파라미터, 2차원 배열

by 도도새 도 2022. 10. 2.

STL Array의 각종 사용 방법

 

앞서 배열에 대한 간단한 정리를 한 바 있다.

https://doompa.tistory.com/283

 

[자료구조] C++ 배열 std::array 정리/함수와 동적 할당 등

배열 array 배열은 가장 보편적이고 대표적인 자료 구조라고 할 수 있다. 그러나 C언어에서 제공하는 배열은 Compile time이전에 그 크기가 결정되어야한다는 큰 단점이 있다. 이를 해결하기 위한 방

doompa.tistory.com

 

 이번 글에서는 STL 배열에 대한 각종 사용 법을 정리하고자한다.

 

C++ 2차원 배열 초기화와 출력

 

2차원 배열의 초기화와 출력

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <array>
#include <iostream>
 
using namespace std;
int main(){
    array<array<int4>4> a1;
    for(auto &row:a1){//row에는 a1의 행 요소가 담긴다.
        for(auto &element:row){ //각 행 요소의 값들이 차례로 element에 담긴다.
            element = 13;
        }
    }
 
    for(auto &row:a1){
            cout<<endl;
        for(auto &element:row){
            cout<<element;
        }
    }
return 0;
}
cs

6 : 2차원 배열 선언

7 : 범위 기반 for문을 이용해 2차원 배열에 값 넣기(Reference 사용)

13 : 범위 기반 for문을 이용해 2차원 배열의 모든 요소 출력

.

 

2차원 배열 선언 및 초기화, 출력

1
2
3
4
5
6
7
8
9
10
11
int main(){
    array<array<int3>3> a1 = {123456789};
//==array<array<int, 3>, 3> a1 {{ {1, 2, 3}, {4, 5, 6}, {7, 8, 9} }}
//제일 바깥 brace는 클래스라는 표시
    for(auto &row:a1){
        cout<<endl;
        for(auto &element:row){
            cout<<element<<" ";
        }
    }
 
return 0;
}
cs

 

1 : 2차원 배열 초기화, 2번줄 주석처럼 2차원 배열을 선언 및 초기화도 가능

4 : 범위 기반 for문으로 출력 

출력값

 

for_each 사용

 

for_each(first, last, fn)

InputIterator first: 배열이나 어떤 container 자료형의 시작부 혹은 포인터

InputIterator last: 배열이나 어떤 container 자료형의 끝부 혹은 포인터

Function fn: 배열이나 container의 각 원소에 수행할, 인자가 1개인 함수. 함수 객체와 함수 포인터 모두 가능하다. 이 함수의 반환값은 무시된다.

 

범위 내의 각 원소들에 대해 각각 fn을 실행한다.

 

for_each 예제코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <bits/stdc++.h>
using namespace std ;
 
 
void aa(int &n){
    n = 13;
    cout<<n<<endl;
}
int main() {
    array<int10> a1;
    for_each(a1.begin(), a1.end(), aa ) ;
    for(auto i:a1){
        cout<<i<<" ";
    }
}
cs

5 : for_each에서 전달되는 요소를 래퍼런스로 받아 13을 할당 및 값 출력

11 : a1 시작 iterator, 끝 iterator, aa라는 함수로 for_each 사용

12 : 배열값 모두 출력(void aa(int &n))에 의해 배열 값 할당됨

 

find 사용

 

find(first, last, val)

InputIterator first: 배열이나 어떤 container 자료형의 시작부 혹은 포인터

InputIterator last: 배열이나 어떤 container 자료형의 끝부 혹은 포인터

searching value: 탐색을 수행할 값

 

탐색에 성공하면 val과 일치하는 원소들 중 첫 번째 원소의 이터레이터를 리턴, 탐색 실패시 last 리턴

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <array>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
 
int main(){
    array<int5> a1 = {1312322324141,23};
    int *= find(a1.begin(), a1.end(), 3);
    cout<<p-a1.begin();//해당 값이 존재시 위치 반환
 
return 0;
}
cs

9 : 크기 5짜리 int 배열 선언

10 : find 함수를 실행 한 후 iterator를 저장

11 : 시작주소 - 찾은 iterator 주소의 위치로 값의 위치 반환

 

sort 사용

 

 

함수 파라미터에 배열 넘기기

 

함수 파라미터에 배열을 넘기는 방법을 정리한다.

 

void printArraySTD(array<int, 6> &array1){//파라미터로 배열을 넘기는 방법

void printArray(int array1[6]){//파라미터로 배열을 넘기는 방법 2 C-style

댓글