c++ Vector, what happens whenever it expands/reallocate on stack?

后端 未结 7 769
情深已故
情深已故 2020-11-29 00:51

I\'m new to C++ and I\'m using the vector class on my project. I found it quite useful because I can have an array that automatically reallocates whenever it is necessary (

7条回答
  •  北荒
    北荒 (楼主)
    2020-11-29 01:16

    If you make some growing vector, from empty, to some size, will be using doubling strategy, and most of the time reallocation, in this example using integer from 1 to 10000, and clang (std=2a -O3) will get this, this is just for fun, showing the importance of using reserve. vector::begin() point to beginning of actual array, and vector::capacity show actual capacity. In the other hand, iterator invalidated is showed.

    std::vector my_vec;
    auto it=my_vec.begin();
    for (int i=0;i<10000;++i) {
        auto cap=my_vec.capacity();
        my_vec.push_back(i);
        if(it!=my_vec.begin()) {
            std::cout<<"it!=my_vec.begin() :";
            it=my_vec.begin();
        }
        if(cap!=my_vec.capacity())std::cout<

    This produce the following result:

    it!=my_vec.begin() :1
    it!=my_vec.begin() :2
    it!=my_vec.begin() :4
    it!=my_vec.begin() :8
    it!=my_vec.begin() :16
    it!=my_vec.begin() :32
    it!=my_vec.begin() :64
    it!=my_vec.begin() :128
    it!=my_vec.begin() :256
    it!=my_vec.begin() :512
    it!=my_vec.begin() :1024
    it!=my_vec.begin() :2048
    it!=my_vec.begin() :4096
    it!=my_vec.begin() :8192
    it!=my_vec.begin() :16384
    

提交回复
热议问题