본문 바로가기

ALGORITHM/코딩테스트를 위한 자료구조와 알고리즘 with c++ 정리

std::vector 와 std::forward list 비교

std::forward list는 단순 연결리스트를 구현해 놓은 래퍼입니다. 성능이나 메모리를 크게 낭비하지 않으면서 간단하고 에러를 유발하지 않는 인터페이스를 제공합니다.

std::vector는 반복자(iterator)를 사용해서 원소의 이동이 앞 뒤로 자유롭지만 단순연결리스트는 그렇지 못하기 때문에 단방향으로만 이동가능합니다.

#include <iostream>
#include <forward_list>
#include <vector>

int main()
{
	std::vector<std::string> vec = {
		"Lewis Hamilton", "Lewis Hamilton", "Nico Roseberg",
		"Sebastian Vettel", "Lewis Hamilton", "Sebastian Vettel",
		"Sebastian Vettel", "Sebastian Vettel", "Fernando Alonso"
	};

	auto it = vec.begin();
	std::cout << "가장 최근 우승자ㅣ " << *it << std::endl;

	it += 8;
	std::cout << "8년 전 우승자: " << *it << std::endl;

	advance(it, -3);
	std::cout << " 그후 3년 뒤 우승자ㅣ " << *it << std::endl;


	// -------------------------------------------------------
	std::forward_list<std::string> fwd(vec.begin(), vec.end());

	auto it1 = fwd.begin();
	std::cout << "가장 최근 우승자: " << *it1 << std::endl;

	advance(it1, 5);
	std::cout << "5년 전 우승자: " << *it << std::endl;

	// forward list는 한 방향으로만 움직일 수 있기때문에 다음 코드는 오류
	/*advance(it1, -2);
	std::cout << "2년 후 우승자: " << *it << std::endl;*/

}