반응형
알고리즘과 멤버 함수
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 |
#include<iostream>
#include<list>
#include<algorithm>
using namespace std;
int main(){
list<int> coll;
for(int i=1; i<=6; ++i){
coll.push_front(i);
coll.push_back(i);
}
coll.erase(remove(coll.begin(),coll.end(),3),coll.end()); // 나쁜 성능
coll.remove(4); // 좋은 성능
}
|
cs |
멤버 함수 대신 알고리즘을 사용할 수 있다고 하더라도 이것은 좋은 생각이 아니다.
멤버 함수의 경우, 동작하는 컨테이너가 어떤 컨테이너인지 알 수 있기 때문에 조금 더 최적화된 구현을 사용한다.
예를 들어, list에 대해 remove()를 호출하는 것은 좋은 예이다. 만약 list에 remove() 알고리즘을 사용한다면,
remove() 알고리즘은 현재 list와 동작한다는 사실을 모른다.
따라서 remove() 알고리즘은 list의 가장 큰 장점인, 삽입, 이동, 제거 능력을 활용하지 않고, 모든 컨테이너에 대해서
작동하는 방식으로 동작할 것이다.
ref : C++ Standard Library
Josuttis, Nicolai M. 저
반응형