c 벡터 템플릿 클레스는 왜 사용하나요?

gyxor의 이미지

// vect1.cpp -- introducing the vector template
#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
double *scores = new double[2];
scores[1] = 3;
double pd = scores[1];
cout << pd;
vector<double> ve(10);

ve[3] = 4;

double ps = ve[3];

cout << ps;

return 0;
}

벡터 템플릿을 이용하게 되면 동적메모리가 할당된다는것은

알고있습니다.

그렇다면 new에 의해 할당해도 충분히 배열처럼 사용할수도 있고

불편한점이 없는거같은데요 왜 백터템플릿을 사용하는지 알고싶습니다.

답변부탁드립니다.

urmajest의 이미지

vector는 'class'입니다

말씀하신대로 new와 delete를 사용해서 하면 되긴합니다만

vector라는 class는 사용자에게 편리한 abstraction을 제공합니다

예를 들어 delete를 하지 않아도 된다는것..

(destructor에서 해주겠죠? 추측이지만..)

그리고 class는 variable+method이므로, method가 있다는 것도

눈치채실 수 있겠죠?

size() , swap() , begin() , end() 등의 method가 있습니다

자세한 기능은 책을 찾아보시구요 ^^

그럼..

badliar의 이미지

님께서 말씀하시는 vector는 STL에서 제공하는 여러가지 컨테이너 클래스 중에 하나입니다. vector를 쓰는 이유는 STL의 장점을 쓰기 위해서라고 할 수 있겠지요.
STL관련해서는 KLDP 토론에서도 여러번 다루어졌던 것으로 알고 있습니다. 찾아보시면 고수분들의 의견을 들으실 수 있으실 겁니다.

제 경우 최근들어 작성하는 코드들은 가능하면 STL을 사용하려고 하고 있는데, STL을 사용하면 메모리 관리도 편해지는 면도 있고, 자료구조와 알고리즘을 분리할 수 있는 장점이 있는 것 같군요. 그리고, 남이 잘 짜놓은 자료구조와 알고리즘을 가져다 씀으로 해서 중복 구현의 낭비와 엉터리 알고리즘으로 인한 성능 저하(?)를 막을 수 있더군요.
무슨 말인고 하면, 예를 들어 처리해야할 데이터의 개수가 처음에는 정해져있다고 생각하고, 정렬도 오름차순으로만 하면된다고 하면, 간단히 배열로 만들고 간단한 소팅 알고리즘을 사용할 수 있겠지요. 그런데 가다보니 데이터 개수가 가변적인 상황이 되면 필요시마다 배열을 새로 생성해야하고, 정렬도 다시 해주어야하겠지요. 이때 메모리 관리도 잘 해주어야할 것이구요. 그런데, 자료 개수만이 문제가 아니라, 정렬도 내림차순도 필요하게 되면 또 알고리즘을 만들어야겠지요. 이러면서 상황이 복합적으로 발생하면 코드도 아주 복잡해지고, 변경해야할 일이 있을 때마다 이에 대한 두려움이 증가합니다.
그런데, STL을 쓰는 경우, 처음에 간단히 시작을 하는 경우, list같은 걸로 시작합니다. 그러다가, 정렬이 필요해지면 list를 썼던 것을 vector같은 걸로 바꾸기만 하면 기존 코드는 손 댈 필요가 없이 정열 알고리즘을 적용할 수 있습니다. 정렬 방법이 변경되면 정렬에 사용할 판별식에 해당하는 클래스 하나 만들어서 지정해주면 끝입니다. 자료 복사도 당근 쉽게 되니까 정렬을 여러가지로 하는 경우에도 변경/추가에 대한 부담은 많이 떨어지게 되구요.
이 뿐 아니라 여러가지 장점이 있지만 다 말씀드릴 실력도 안되오니 좋을 자료 찾아보시고, 혹시 참고 서적이 필요하시면

STL Tutorial and Reference Guide / Addison Wesley

을 보세요. 인터넷에도 STL에 대한 자료는 많으니 간단히 찾아보셔도 되구요. 요즘은 쓸만 C++책에도 STL을 소개하고 있더군요.

Sungwon Choe
-----
...... Actually, a person doesn't really understand something
until he can teach it to a computer......

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.