[C++]8. C++ list사용하기
안녕하세요 고급 개발자가 꿈인 코린이 입니다.
오늘은 c++에서 사용하는 list container를 설명 드리겠습니다.
c++에서는 vector 말고도 많이 사용되는 list가 있습니다. list라고 하면 요즘에 자바를 많이 배우기 때문에 이름은 많이
익숙합니다.
하지만 자바에서 사용하는 list와 c++에서 사용하는 list는 많은 차이가 있습니다.
c++에서 사용하는 list를 중간 원소에 대해서 직접 참조를 할수가 없습니다.
vector에서는 at과 배열과 같이 대괄호를 사용해서 각 원소의 위치값의 원소를 직접 참조 할수 있지만 list의 경우는
참조할수가 없습니다. 물론 반복자를 통해서 접근 하는 방식은 있지만 초보 개발자 분들께서는 살짝 어려운
감이 있습니다.(물론 저도 초보 개발자지만 .... ㅎㅎㅎ)
그대신에 vector에서는 first in last out구조를 따르지만 list를 앞뒤에서 pop push 가 가능하기 때문에
first in first out 구조를 사용할때 유리하게 됩니다. vector를 pop_back밖에 없기때문에 앞에원소를 삭제하기 위해서는
반복자를 사용해야하지만 list를 반복자를 사용하지 않아도 앞의 원소를 삭제 할수 있습니다.
그래서 반복자에 익숙하지 않는 분들께서는 개발하실때 어떠한 컨테이너가 자신이 구현하는 프로그램에 맞는 것인지
파악후 vector를 사용할지 list를 사용할지 결정 해주시면 될것 같습니다.
list에서 앞의 원소를 삭제하는 방법은 아래의 코드를 보면서 설명 드리겠습니다.
#ifndef SERVICECLASSCECLASS_H
#define SERVICECLASSCECLASS_H
#include <iostream>
#include <vector>
#include <list>
struct VectorStruct{
};
class ServiceClass
{
public:
ServiceClass();
virtual ~ServiceClass();
private:
std::list<int> mList;
public:
void listTest();
};
#endif // SERVICECLASSCECLASS_H
#include "ServiceClass.h"
ServiceClass::ServiceClass()
{
listTest();
}
ServiceClass::~ServiceClass()
{
}
void ServiceClass::listTest()
{
int count = 0;
mList.push_back(3);//리스트 뒤에 원소를 추가하는 함수
mList.push_back(4);
mList.push_back(5);
mList.push_back(6);
mList.push_back(7);
std::cout << "============push_back===========" << std::endl;
for(auto list : mList){
std::cout << "mList index :" << count << "mList value:" << list << std::endl;
count++;
}
count = 0;
mList.push_front(2);//리스트 앞에 원소를 추가하는 함수
mList.push_front(1);
std::cout << "============push_front===========" << std::endl;
for(auto list : mList){//리스트의 모든 원소를 출력
std::cout << "mList index :" << count << "mList value:" << list << std::endl;
count++;
}
count = 0;
mList.pop_back();//리스트 맨뒤에 원소를 삭제 하는 함수
mList.pop_back();
std::cout << "============pop_back===========" << std::endl;
for(auto list : mList){
std::cout << "mList index :" << count << "mList value:" << list << std::endl;
count++;
}
count = 0;
mList.pop_front();//리스트의 맨 앞의 원소를 삭제 하는 함수
mList.pop_front();
std::cout << "============pop_front===========" << std::endl;
for(auto list : mList){
std::cout << "mList index :" << count << "mList value:" << list << std::endl;
count++;
}
}
위의 코드를 보시면 vector와 같이 push_back이라는 함수를 사용해서 데이터를 넣고 있습니다.
그리고 push_front를 사용하는 것을 볼수 있습니다. 이 함수는 리스트의 앞쪽에 원소를 추가할때 사용하는 함수 입니다.
vector와 같이 pop_back을 사용해서 리스트의 맨 뒤의원소를 삭제할수있고
또한 pop_front를 사용해서 리스트의 맨 앞의 원소를 삭제 할수도 있습니다.
이렇게 맨 앞의 원소를 추가 및 제거 맨 뒤의 원소를 추가 및 제거를 할수 있으므로 first in first out 및 first in last out등을
같이 구현할수가 있습니다.
이러한 list를 사용하는 예로는 사이즈가 정해진 list에 어떠한 데이터가 순서대로 추가가 되고 꽉 차게되면
앞의 원소를 삭제후 추가할때 list를 많이 사용합니다. 물론 이 내용은 vector로도 구현이 가능하나 list로 구현을 하면
vector보다 훨씬 쉽게 사용할수 있습니다.
여기 까지 c++에서 list를 사용해 보았습니다.
다음시간에는 c++ queue container를 설명 드리겠습니다.
여기까지 읽어주셔서 감사합니다!!
'C++ > C++심화' 카테고리의 다른 글
[C++]10. vector 사용하기(구조체 vector중간 원소 삭제하기,특정원소 삭제하기) (0) | 2019.09.04 |
---|---|
[C++]9. C++ #if #define 사용하기(전처리 지시문 사용하기) (0) | 2019.09.02 |
[C++]7. vector 사용하기(vector에서 중간 원소 삭제하기) (0) | 2019.08.17 |
[C++]6. vector 사용하기(구조체 vector사용 하기) (0) | 2019.07.14 |
[C++]5. Enum값 사용하기 (0) | 2019.06.19 |