c++ - 如何验证指向标准向量内部数组的指针
问题描述
我想写入向量的内部数组。data()
如果向量被初始化,我可以写。
但是,如果向量为空(但有足够的存储空间),我无法直接写入向量的内部数组。
#include <vector>
#include <iostream>
using namespace std;
void write_seq(int *v, size_t len)
{
for (int i = 0; i < len; i++)
v[i] = i;
}
int main(void)
{
vector<int> v;
cout << "reserve and write\n";
v.reserve(10);
write_seq(v.data(), v.capacity());
cout << "seq length " << v.size() << "\n";
return 0;
}
输出:
$ g++ main.cpp && ./a.out
reserve and write
seq length 0
如何避免这种情况,是否可以验证data()
向量的指针?
编辑:
我在这个问题上假设了两件事,一个空的vector v;
,
v.reserve(10)
为 10 个元素分配内存和v.data()
指向分配的内存。
解决方案
您想使用resize
、 不reserve
和size
代替capacity
。reserve
只是简单地给向量增加容量,而不实际增加大小。resize
增加大小以匹配保留容量。
推荐阅读
- c# - C# UWP - 如何修复 FileOpenPicker 和 StorageFile 异步错误?
- c++ - 如何使用 VSCode 和 CMake (Windows) 将库 (SDL 2) 链接到 C++ 项目
- c - 如果类型转换为有符号,十六进制数字是否会得到符号扩展?
- javascript - 如何使用jquery检测对下拉列表内的按钮的点击
- android - 在 nativescript 中启用 AcousticEchoCanceler.in
- jenkins - 如何从 src 目录中的类中访问共享库资源文件夹中的静态文件
- windows - 有没有一种特殊的方法可以在 Jenkins 中运行可执行文件?
- javascript - 如何删除滚动条,但仍允许使用鼠标滚动?
- mongodb - mongoDB对两个字段排序
- python-3.x - 为什么“请求”模块超时在 python3 中不起作用?