我试图将 std::vector
用作 char
数组。
我的函数接受一个空指针:
void process_data(const void *data);
以前我只是使用了这段代码:
char something[] = "my data here";
process_data(something);
之前的代码如预期一样运行。
但现在我需要 std::vector
的动态性,所以我尝试了以下代码:
vector<char> something;
*cut*
process_data(something);
问题是,我该如何将 char 向量传递给我的函数,以便可以访问向量的原始数据(无论其格式是什么 - 浮点数等)?
我尝试过这样:
process_data(&something);
还有这个:
process_data(&something.begin());
但它返回了一条指向乱码数据的指针,后者给出了警告:warning C4238: nonstandard extension used : class rvalue used as lvalue
。
vector<bool>
,它是这个答案的一个例外(并且不具有连续的布尔值内存存储)。 - Mottistd::vector<bool>
,因为std::vector<bool>
需要使用代理对象,而该代理对象不能隐式转换为bool*
。作为解决方法,如果确实需要一个bool
序列,最好只使用std::vector<char>
。@Motti - James McNellis.data()
- 我会假装我没有看到那个丑陋的&*iterator
:P - underscore_ddata()
返回后会存活多久? 如果永远不通过push_back()
或其他函数(包括reserve
)调整向量大小(更大或更小),那么它保证指针将与向量一起存活,并指向正确的位置吗? - johnbakers