본문 바로가기

C

c++ vector basic 설명

vector basic 설명

 

vector의 random access complexity -> constant O(1)

insertion or removal of elements at the end - constant O(1)

insertion or removal of elements - linear in the distance to the end of the vector O(n)

 

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
70
#include <iostream>
#include <vector>
 
/// Dynamic size
class Cat
{
public:
    explicit Cat(int age) : mAge{ age } {};
    void speak() const
    {
        std::cout << "meow~" << mAge << std::endl;
    }
private:
    int mAge;
};
 
int main()
{
    // Dynamic Size by array
    // 그러나 delete를 잊어버리면 메모리 leak 발생
    // 이를 방지하기 위한 것이 vector임
    int* numsPtr = new int[5];
    for (int i = 0; i < 5; i++)
    {
        numsPtr[i] = i;
    };
    delete numsPtr;
 
    std::vector<int> nums(5);
    //std::vector<int> nums{0,1,2,3,4}; 도 가능
    for (int i = 0; i < 5; i++)
    {
        nums[i] = i;
    }
 
    std::cout << "nums.size() : " <<  nums.size() << std::endl;
    nums.emplace_back(5);
    std::cout << "nums.size() : " <<  nums.size() << std::endl;
    nums.pop_back();
    std::cout << "nums.size() : " <<  nums.size() << std::endl;
    
    //vector iterator
    for (std::size_t idx = 0; idx < nums.size(); idx++)
    {
        std::cout << nums[idx] << std::endl;
    }
 
    for (auto itr = nums.begin(); itr != nums.end(); itr++)
    {
        std::cout << *itr << std::endl;
    }
 
    // vector를 iterate 하기 가장 좋은 방법
    for (const int& num : nums)
    {
        std::cout << num << std::endl;
    }
 
    // Class 넣기
    std::vector<Cat> cats;
    cats.emplace_back(Cat(1));
    cats.emplace_back(Cat(2));
    cats.emplace_back(Cat(3));
    cats.emplace_back(Cat(4));
 
    for (const auto& cat : cats)
    {
        cat.speak();
    }
}