vector中struct的类型名是什么?
What is type name of struct inside a vector
我有一个结构体:
struct wav_file_info_struct
{
char filename[MAX_PATH];
WORD audio_format;
WORD num_channels;
DWORD sample_rate;
DWORD bits_per_sample;
};
struct wav_file_data_struct
{
DWORD data_chunk_size;
char* wav_data;
};
struct wav_file_struct
{
wav_file_info_struct wav_file_info;
wav_file_data_struct wav_file_data;
};
现在,如果我像这样创建一个向量:
std::vector<wav_file_struct> v_wav_file_struct;
我如何传递结构内部wav_file_struct作为参数的函数,使它可以作为一个矢量访问?例:我想传递wav_file_info到一个函数,但作为一个矢量。似乎因为它是在wav_file_struct的向量内,我必须传递向量wav_file_struct,然后函数可以访问内部结构成员和这些结构内部的成员。正确吗?
你的结论大体上是正确的。没有任何机制可以接受类的向量,并将其类型转换为包含每个类实例的特定成员的向量。话虽如此:
如果你养成了在迭代器定义的序列上操作模板类或函数的习惯,有一些事情是可以做的;而不是将整个容器作为参数的离散函数。
假设你有一个模板函数,在给定开始迭代器值和结束迭代器值的情况下执行它的任务,而不是一个接受wav_file_info
的向量并对其进行处理的函数。
然后,这就变成了为std::vector<wav_file_struct>::iterator
定义包装器的简单任务,该包装器通常继承其超类的所有内容,但将其value_type
定义为wav_file_info
,并为operator*
和operator->
提供合适的替代品。问题解决了。(1)
这种方法会导致代码膨胀。但是,在过去的几年里,RAM的价格一直在下降;如果这成为一个问题,还有很多其他的事情可以做。
(1)从技术上讲,没有必要经历从传递容器到传递开始和结束迭代器值的范式转换。您可以让模板函数有一个容器类作为参数,并提供一个自定义容器包装器,其begin()
和end()
返回上述迭代器包装器(并实现可能需要的任何其他容器方法)。
可以指定接收整个向量的函数,也可以指定接收元素类型的函数。
//function that takes the vector
void take_vec(std::vector<wav_file_struct> vec){}
//function that takes an element
void take_element(wav_file_struct element){}
int main(){
//create a vector
std::vector<wav_file_struct> vec;
vec.emplace_back();
//pass in the entire vector
take_vec(vec);
//pass in an element
take_element(vec[0]);
}
- 静态自动 constexpr t = { "red" , "black" , "green" } 是什么类型;派生到?
- 这是什么类型的C++语法,我应该采取什么步骤来理解这一点
- 这在C++是什么类型的错误?
- int(int)& 或 int(int) const &是什么类型?
- 我如何找出3D容器的元素是什么类型
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 这个 lambda 的参数是什么类型?
- 转换逻辑目标是什么类型
- 如果我创建一个修改值的迭代器,静态成员"reference"应该是什么类型?
- 这是什么类型的行为
- 给定以下内容,"function"是什么类型?
- C++:文本文件中的数据是什么类型的
- C++11 中的"auto var = {condition} ? 1 : 1.0"是什么类型?是双精度还是整数?
- C++中的 decltype(this) 是什么类型
- 如何知道模板<类型名称类型>是什么类型?
- 内置数组的大小是什么类型?
- c++ 11中的std::chrono::high_resolution_clock::now()是什么类型?
- 在Microsoft Visual C++中,光线跟踪器应该是什么类型的项目
- 如何为delete编写一个C包装器,既快速又释放给定的任何类型,而不告诉它是什么类型
- 如何编写一个函数,无论数组是什么类型都输出它