如何防止矢量的内存地址更改
How to prevent vector from memory address change
我想知道是否有任何好的解决方案可以防止向量因内存地址更改。
我的代码 :
#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
如您所见,一旦我在vector
中push_back()
新值,内存地址就会更改。
有什么好的解决方案可以使地址不改变吗?
您可以先为所需数量的元素保留内存。
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 的文档。
您可以使用 std::vector::reserve 来避免重新分配。
std::vector<int> vec;
vec.reserve(5);
for (int i = 0; i < 5; ++i)
...
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- CUDA:统一内存和指针地址的更改
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用内存地址访问结构的属性值
- 如何读取特定地址的进程内存?
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 如果 const 不分配内存,为什么我可以获取 const 的地址?
- 将布局映射到内存地址
- 为什么同一个变量的内存地址不同?
- LLVM 传递以在特定地址分配内存
- 无法将内存地址转换为值
- 是否可以仅通过将分配的指针地址存储在C++中来分析内存?
- 给定特定内存地址的数组的动态内存分配
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 我有一个线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)错误.我认为这是由于内存管理不好.我可以
- 获取 R 数据帧的内存地址
- 如何配置bazel以运行地址/内存清理器?
- 存储 std::list 元素的地址;内存
- 确定库的地址内存