首页 > 解决方案 > 如何防止vector改变内存地址

问题描述

我想知道是否有任何好的解决方案来防止向量改变内存地址。

我的代码:

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> vec;

    for (int i = 0; i < 5; ++i)
    {
        vec.push_back(i);

        std::cout << "----------Current memory addresses----------\n";
        for (size_t j = 0; j < vec.size(); ++j)
            std::cout << j << " : " << &vec[j] << '\n';
    }
    return 0;
}

结果 :

----------Current memory addresses----------
0 : 0x10060b970
----------Current memory addresses----------
0 : 0x1006089a0
1 : 0x1006089a4
----------Current memory addresses----------
0 : 0x10060b970
1 : 0x10060b974
2 : 0x10060b978
----------Current memory addresses----------
0 : 0x10060b970
1 : 0x10060b974
2 : 0x10060b978
3 : 0x10060b97c
----------Current memory addresses----------
0 : 0x100611e40
1 : 0x100611e44
2 : 0x100611e48
3 : 0x100611e4c
4 : 0x100611e50
Program ended with exit code: 0

如您所见,只要push_back()将新值放入vector.

有什么好的解决方案可以让地址不改变吗?

标签: c++vectormemory-address

解决方案


您可以先为所需数量的元素保留内存。

std::vector<int> vec;

// Reserve memory for 5 elements
vec.reserve(5); 

for (int i = 0; i < 5; ++i)
{
    vec.push_back(i);

    ...
}

有关更多信息,请参阅std::vector::reserve的文档。


推荐阅读