두개의 배열의 요소들이 모두 같은지 확인하는 방법을 소개합니다.
1. std::equal()을 이용한 방법
std::equal(first1, last1, first2)는 첫번째 배열의 첫번째 위치인 first1에서 마지막 위치인 last1 사이의 요소들을 두번째 요소 first2와 비교합니다. first2는 두번째 요소의 첫번째 위치가 됩니다.
아래와 같이 첫번째 배열의 요소들과 두번째 배열의 요소들이 같은지 비교할 수 있습니다. 두 배열을 비교하기 전에, 길이가 같은지 먼저 비교하면 불필요한 연산을 피할 수 있습니다.
#include <iostream>
#include <algorithm>
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {1, 2, 3, 4, 5};
int m = sizeof(arr1) / sizeof(*arr1);
int n = sizeof(arr2) / sizeof(*arr2);
if (m == n && std::equal(arr1, arr1 + m, arr2)) {
std::cout << "Equal";
} else {
std::cout << "Not equal";
}
return 0;
}
Output:
Equal
참고로, C++11에서는 equal()
에 아래와 같이 iterator를 전달해도 됩니다.
if (m == n && std::equal(std::begin(arr1), std::end(arr1), std::begin(arr2))) {
std::cout << "Equal";
} else {
std::cout << "Not equal";
}
2. 직접 비교 함수를 구현하는 방법
아래와 같이 반복문을 이용하여 비교 함수를 직접 구현할 수 있습니다.
#include <iostream>
bool equal(int arr1[], int arr1_len, int arr2[], int arr2_len) {
if (arr1_len != arr2_len) {
return false;
}
for (int i = 0; i < arr1_len; i++) {
if (arr1[i] != arr2[i]) {
return false;
}
}
return true;
}
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {1, 2, 3, 4, 5};
int m = sizeof(arr1) / sizeof(*arr1);
int n = sizeof(arr2) / sizeof(*arr2);
if (equal(arr1, m, arr2, n)) {
std::cout << "Equal";
} else {
std::cout << "Not equal";
}
return 0;
}
Output:
Equal
3. 잘못된 방법, == 연산자로 비교
==
연산자로 두 배열을 비교하면, 두 배열의 주소 값을 비교하며, 배열이 갖고 있는 요소들을 비교하지 않습니다.
따라서, ==
연산자로 두 배열의 요소가 같은지 비교해서는 안됩니다.
#include <iostream>
int main() {
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {1, 2, 3, 4, 5};
if (arr1 == arr2) {
std::cout << "Equal";
} else {
std::cout << "Not equal";
}
return 0;
}
Output:
Not equal
Loading script...
Related Posts
- [C++] 배열을 리스트(list)로 변환
- [C++] 배열에서 특정 요소 제거
- [C++] vector 모든 요소의 합계 계산
- [C++] 두개의 배열이 같은지 비교
- [C++] 배열에 특정 요소가 있는지 확인
- [C++] 2차 배열 복사 방법
- [C++] 배열 복사하는 방법 (copy, memcpy)
- [C++] 함수의 인자로 배열 전달
- [C++] vector 모든 값의 평균 계산
- [C++] vector를 문자열로 변환
- [C++] 배열에서 요소의 Index 찾기
- [C++] 배열의 중복 요소 찾기
- [C++] 배열의 중복 요소 제거
- [C++] 배열 순서 거꾸로 뒤집기
- [C++] char 배열을 string으로 변환
- [C++] string을 char 배열로 변환
- [C++] 문자열 거꾸로 뒤집기
- [C++] vector의 중복 요소 제거
- [C++] 두 배열을 하나의 배열로 합치기
- [C++] 배열 길이, 크기 얻는 방법
- [C++] 배열에서 최대값, 최소값 찾기 (3가지 방법)
- [C++] int를 string으로 변환, 3가지 방법
- [C++] 문자열 리스트(Vector, 배열) 정렬
- [C++] string의 문자 정렬
- [C++] string을 int로 변환, 3가지 방법
- [C++] string 대문자/소문자 변환 방법
- [C++] string.compare() 문자열 비교
- [C++] int를 char로 변환, 3가지 방법
- [C++] 문자열 자르기, 3가지 방법
- [C++] isdigit(), 어떤 문자가 숫자인지 확인
- [C++] strlen(), 문자열 길이 계산
- [C++] strcmp(), strncmp() 함수로 문자열 비교
- [C++] strstr(), 특정 문자열 찾기