c++ - 如何防止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<int> vec;
// Reserve memory for 5 elements
vec.reserve(5);
for (int i = 0; i < 5; ++i)
{
vec.push_back(i);
...
}
推荐阅读
- java - Spring Cache 从 Value 中获取 key
- amazon-web-services - Perl 日志记录不适用于长系统调用
- javascript - How do I pass object correctly to my vue component?
- python - Google Cloud App Engine Flexible Python 2.7 Env Errors starting new threads
- javascript - Velocity js for scale 1
- excel - 使用表名检查特定表是否存在时的 VBA Excel 错误处理
- r - 使用与列表中的值匹配的多列过滤或子集数据框
- ios - swift:下载百分比
- java - 一个类可以扩展一个抽象类并同时实现一个接口吗?(爪哇)
- angular - Angular 5 中的路由器模块不起作用,如何使用它?