我想使用std :: string简单地创建一个动态缓冲区,而不是使用索引迭代它.resize()是实际分配缓冲区的唯一函数吗?
我尝试了reserve()但是当我尝试通过索引访问字符串时它断言.此外,当字符串的默认容量似乎是15个字节(在我的情况下),但如果我仍然无法访问它my_string[1].
所以字符串的容量不是实际的缓冲区?reserve()也没有分配实际的缓冲区?
string my_string;
// I want my string to have 20 bytes long buffer
my_string.reserve( 20 );
int i = 0;
for ( parsing_something_else_loop )
{
char ch = <business_logic>;
// store the character in
my_string[i++] = ch; // this crashes
}
Run Code Online (Sandbox Code Playgroud)
如果我做resize()而不是reserve()比它工作正常.字符串是如何容量但却无法使用[]真正访问它?是不是要保留()大小以便你可以访问它?
附加组件 为了回答这些问题,我想问一下stl人们,为什么有人会在resize()完全相同的情况下使用reserve()并且还会初始化字符串?我不得不说我不太欣赏这种情况下的表现论点.所有resize()除了reserve()之外还做了更多的事情,它只是初始化缓冲区,我们知道它总是很好.我们可以在岛上投票保留()吗?
我想将一个字符串附加到维度1的HDF5数据集.以下代码用于将双精度附加到文件test-doubles.h5中的"双精度"数据集,但代码段错误在dataset.write(str, string_type, mspace, fspace)调用中:
#include "H5Cpp.h"
const int RANK = 1;
H5::StrType string_type(H5::PredType::C_S1, H5T_VARIABLE);
void append_double(H5::DataSet &dataset, double value) {
// dataspace
hsize_t dims[RANK] = { 1 };
hsize_t maxdims[RANK] = { H5S_UNLIMITED };
H5::DataSpace mspace(RANK, dims, maxdims);
H5::DataSpace space = dataset.getSpace();
const hsize_t actual_dim = space.getSimpleExtentNpoints();
// extend the dataset
hsize_t new_size[RANK];
new_size[0] = actual_dim + 1;
dataset.extend(new_size);
// select hyperslab.
H5::DataSpace fspace = dataset.getSpace();
hsize_t offset[RANK] = { actual_dim };
hsize_t dims1[RANK] …Run Code Online (Sandbox Code Playgroud)