如何防止向量从内存地址更改
How to prevent vector from memory address change
我想知道有没有什么好的方案可以防止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
时,内存地址就会改变。
有没有什么好的办法让地址不变?
您可以使用 std::vector::reserve 来避免重新分配。
std::vector<int> vec;
vec.reserve(5);
for (int i = 0; i < 5; ++i)
...
您可以先为所需数量的元素预留内存。
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 的文档。
我想知道有没有什么好的方案可以防止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
时,内存地址就会改变。
有没有什么好的办法让地址不变?
您可以使用 std::vector::reserve 来避免重新分配。
std::vector<int> vec;
vec.reserve(5);
for (int i = 0; i < 5; ++i)
...
您可以先为所需数量的元素预留内存。
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 的文档。