具有动态分配成员的结构体的向量
Vector of structs with dynamically allocated members
如果我想用结构体填充向量,并且在结构体中我需要动态分配/重新定位WCHAR
数组,我将如何填充这个?
我不能使用std::wstring
,因为我要使用Windows API的成员。而RegQueryValueEx
等功能需要LPBYTE
来接收数据。
或者是否有其他STL容器我应该使用?
示例代码:
typedef struct {
WCHAR *str1;
WCHAR *str2;
DWORD SomeOtherStuff;
} MYSTRUCT;
vector<MYSTRUCT> myvector;
使用std::vector<WCHAR>
作为结构体成员。这将为您的结构提供必要的复制/移动语义,将其放在vector
中,当您需要某些API的原始指针时,它可以作为&str1[0]
使用。
在执行任何访问数据的操作之前,请记住确保它足够大(通过将其初始化为所需的大小或调用resize()
)。还要记住,当vector的大小被调整时,指向数据的指针和迭代器将失效。
可以为结构定义复制构造函数、赋值操作符和析构函数。然后,每个实例的所有副本都将拥有它们自己的动态分配内存的副本。
或者直接用std::wstring
std::wstring
提供了一个访问器方法c_str
,它为您提供了一个指向底层以空结束的字符串的指针。这允许你在C api中使用std::wstring。
std::wstring wide_string;
some_win_api_call( wide_string.c_str() ); // sending a string to winapi
要从winapi获得一个字符串,你需要自己分配一个缓冲区,并传入一个指向缓冲区的指针,以及缓冲区的长度。
wide_string.reserve( 256 ); // allocate some space to receive a string
get_string_from_winapi( &wide_string[0], wide_string.capacity() );
如果api需要以字节为单位的长度,您可能需要执行wide_string.capacity() * sizeof(wchar_t)
。我的例子假设长度为字符。
相关文章:
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 如何使用结构体的向量数组?
- 如何使用迭代器指向结构体c++的向量
- 创建结构体向量,表达式:向量下标超出范围
- C++ push_back() 一个结构体到一个向量中
- 使用 boost::p ython,如何将结构体向量作为字典列表返回给 Python
- 交换结构体 c++ 向量的内容
- Vector::erase()也擦除结构体的成员向量
- 如何在结构体中传递指向CURL的指针到向量
- 对的向量和包含两个元素的结构体的向量的内存布局的区别- c++ /STL
- 列表排序和结构体向量排序之间的性能差距.c++
- 带有指针的结构体向量
- 结构体向量的问题:解约束迭代器(可能很容易)
- 试图使用指向结构体向量的指针访问结构体类型时出错
- 如何在结构体向量的ROS中发布消息?
- c++中初始化结构体向量的正确方法
- 使用命令行参数创建结构体向量
- c++结构体向量的适当方法
- 结构体向量与结构体向量的映射
- 从文本文件c++中加载结构体向量的奇怪问题