7월, 2019의 게시물 표시

C++로 프로그래밍할 때 인자 또는 리턴 값으로 std::vector 등 STL 데이터 타입 처리하는 좋은 방법

C++ 프로그래밍할 때 std::vector 등 STL 데이터 타입을 호출하는 함수로 넘겨주거나 받아야 할 경우가 있다. 이런 경우 메모리 문제 또는 속도 문제 때문에 고민을 많이 할 것 같은데, C++11 이상을 지원하는 컴파일러를 사용하는 분이라면 이 글에서 도움을 받아 가기 바란다. 함수 인자로 넘길 때 이 경우는 사용이 명확하다. Call by Reference으로 데이터를 넘기면 된다.  Call By Reference로 인자로 넘기는 방법은 pointer 를 사용해도 되지만, reference을 사용하는 것이 좋다. void foo1(std::vector & data) {   ... } void foo2(std::vector const& data) {   ... } void foo3(std::vector data) { } int main(int argc, char* argv[]) {   std::vector my_data {10, 20, 30};   foo1(my_data);   foo2(my_data); } 위 코드에서 foo1()과 foo2()는 Call by Reference로 값을 넘기는 반면에 foo3()는 Call by Value로 main()에서 my_data를 넘기게 된다.  foo1()의 data는 main()의 my_data를 참조(reference)하고 있어서 foo1()에서의 데이터 변경은 main()의 my_data에 영향을 주게 된다. 그리고 foo2()는 main()의 my_data를 참조는 하지만 수정을 할 수가 없는 것이라서 단순히 값만 참조할 수 있게 된다. 반면 foo3()에서의 data는 main()의 my_data를 넘기는 순간에 값을 복사하기 때문에 메모리가 증가하게 된다. 또한 foo3()에서 data를 ...