2008.10.05 23:38

[TR1 살펴보기] 2. Array

Lyn
조회 수 37738 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
예제코드

#include <iostream>
#include <array>

using namespace std;
using namespace std::tr1;

void main()
{
    array<int, 100> intarr;

    //초기화
    intarr.assign(0);  //모든 요소를 0으로 초기화한다
    for (int i = 0; i < 100; ++i)
    {
        cout << intarr[i] << " ";
    }
    //값을 대입해본다
    for (int i = 0; i < 100; ++i)
    {
        intarr[i] = i;
    }

    cout << endl << "Size : " << intarr.size() << endl;

    cout << "이터레이터를 사용한 루프" << endl;
    array<int, 100>::iterator ia;
    for (ia = intarr.begin() ; ia != intarr.end(); ++ia)
    {
        //이터레이터를 사용한 루프
        cout << *ia << " ";
    }
    cout << endl << "일반 배열처럼 접근하는 루프" << endl;
    for (int i = 0; i < 100; ++i)
    {
        cout << intarr[i] << " ";
    }

    //만약 범위를 벗어난다면 std::range_error 예외를 생성한다
//    intarr[100] = 1;
    system("pause");
}

TR1에서 추가된 array는 크기가 고정된 배열입니다.
즉 위에서의 array<int, 100> intarr 은 int intarr[100] 과 본질적으론 차이가 없습니다.

단지 관리를 편리하게 하기 위해 객체로 제공된다는것(C#, Java 와 같다고 보심 편합니다) 그리고 범위를 넘어설 시 예외를 발생한다는점이 특징입니다. (C의 배열은 범위를 넘어서도 치명적인 부분에 접근하기전까지는 오류발생을 모르는 경우도 있고.. 이경우 오류의 추적이 매우 어렵습니다)

C++ 표준 라이브러리의 일부가 될 TR1이므로 STL에서 사용하는 이터레이터 문법을 그대로 사용 할 수 있으며,
일반 배열과 본질적으로 같으므로 [] 연산자로 값을 읽고 쓸 수도 있습니다.

또한 swap, assign, size 등의 멤버함수를 제공하여, 초기화, 교체 등의 작업을 쉽게 할 수 있으며, 배열의 크기를 얻어 올 수도 있습니다.

배열에 비해 사용시의 오버헤드가 좀 있긴 하지만... 안정적인 프로그램의 메모리 관리를 위해서는 사용 해 볼만 합니다.
?

List of Articles
번호 제목 글쓴이 날짜 조회 수
138 [TR1 살펴보기] 1. Random Lyn 2008.10.05 38495
137 대기하는 쓰래드 모두 깨우기 (Java의 notifyAll) Lyn 2012.09.04 38096
136 Boost 에서 자기 자신의 shared_ptr 리턴하기 file Lyn 2010.03.02 38019
» [TR1 살펴보기] 2. Array Lyn 2008.10.05 37738
134 Mysql 툴 Lyn 2011.03.31 37597
133 [개인자료] 프로그램 만들때 무조건 해야하는것.. Lyn 2011.01.26 37286
132 [Boost 살펴보기] 1. pool file Lyn 2009.05.11 37259
131 컨테이너가 파괴될 때 소유한 객체 자동으로 파괴하기 Lyn 2008.10.22 36911
130 [Boost 살펴보기] 2. any Lyn 2009.05.11 36891
129 [Boost 살펴보기] 4. multi_array Lyn 2009.05.11 36887
128 [TR1 살펴보기] 3. UnOrdered Containers Lyn 2008.10.05 35782
127 MS가 C++AMP 를 clang+llvm 기반으로 포팅했네요. Lyn 2013.11.13 35734
126 C++11 표준 라이브러리 확장 (cbegin, cend) Lyn 2012.10.04 34619
125 [잡설] 앱스토어의 유행. 프로그래머에겐 과연? Lyn 2010.02.19 34488
124 C Runtime Library Exception Dump 남기기 첫번째방법 Lyn 2013.06.11 33226
123 C++11 lambda 간단사용법과 성능비교. 4 file Lyn 2012.01.30 32734
122 Boost 빌드 방법 1 Lyn 2012.01.14 31854
121 Visual C++ 2013 추가기능 2. Variadic Tamplate - 1 file Lyn 2013.12.03 30753
120 C++ 템플릿 상속에서 베이스 클래스의 멤버에 접근하는 경우의 문제 1 file Lyn 2012.08.29 30556
119 ubuntu 14.04 에서 apache rotatelogs 설치하기 Lyn 2014.08.22 30389
Board Pagination Prev 1 2 3 4 5 6 7 ... 8 Next
/ 8