代码之家  ›  专栏  ›  技术社区  ›  Zack Lee

如何防止向量内存地址改变[重复]

  •  1
  • Zack Lee  · 技术社区  · 6 年前

    我想知道是否有什么好的解决方案,以防止从内存地址改变向量。

    我的代码:

    #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 .

    有什么好的解决办法使地址不变吗?

    2 回复  |  直到 6 年前
        1
  •  2
  •   R Sahu    6 年前

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

    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

        2
  •  1
  •   songyuanyao    6 年前

    你可以用 std::vector::reserve 以避免重新分配。

    std::vector<int> vec;
    vec.reserve(5);
    for (int i = 0; i < 5; ++i)
    ...