나는 벡터가 내부적으로 동적 배열을 이용하여 구현된 줄 알았는데


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <iostream>
#include <cstdio>
#include <thread>
#include <vector>
#include <random>
 
#define SIZE 10
 
//배열과 벡터를 받는다. 벡터는 레퍼런스를 이용하여 넘긴다.
void Print(std::vector<int>& v, int* arr)
{
    // v 벡터의 원소에 0~10사이의 값을 더해준다.
    printf("벡터 :");
    for (int i = 0; i < SIZE; i++)
    {
        std::random_device rd;
        int input = rd() % 10;
        v[i] += input;
        printf("[%d] ", v[i]);
    }
    puts("");
 
    // arr 배열의 원소에 0~10사이의 값을 더해준다.
    printf("배열 :");
    for (int i = 0; i < SIZE; i++)
    {
        std::random_device rd;
        int input = rd() % 10;
        arr[i] += input;
        printf("[%d] ", arr[i]);
    }
    puts("");
}
 
int main()
{
    std::vector<int> v;
    v.reserve(SIZE);
    std::random_device rd;
    int arr[SIZE];
 
    //벡터와 배열 초기화
    for(int i=0; i<SIZE; i++)
    {
        int input = rd() % 10;
        v.push_back(input);
        arr[i] = input;
    }
 
    std::thread t1(Print,v,arr);
    t1.join();
 
    //스레드 이후의 상황
    puts("");
    printf("벡터 :");
    for (int i = 0; i < SIZE; i++)
    {
        printf("[%d] ", v[i]);
    }
    
    puts("");
    printf("배열 :");
    for (int i = 0; i < SIZE; i++)
    {
        printf("[%d] ", arr[i]);
    }
 
    return 0;
}
cs





저런 결과가 나오넹.

배열은 데이터 영역에 속하니까 저렇게 될 거는 예상했는데

벡터는 따로 노네. 벡터는 그럼 스택 영역에 속한것인데..