c++将数组强制转换为可变大小的向量
C++ casting an array to a variably size vector
我想知道是否有一个简单的解决方案将数组转换为可变大小的向量。
double CApp::GetTargetCost(const vector<unsigned char> &uHalfphoneFeatureVector_Bytes,const vector<unsigned char> &uTargetFeatureVector_Bytes)
我想通过
struct udtByteFeatures
{
unsigned char Values[52];
};
到这个函数,但是c++不喜欢它有固定大小的事实。它需要一个可变大小的vector
我得到的错误是error C2664: 'CApp::GetTargetCost': Conversion of parameter 1 from 'unsigned char [52]' to 'const std::vector<_Ty> &' not possible
我还不确定以后是否会使用固定的大小,但目前我只是想保持灵活。
谢谢!
只有在知道数组大小的情况下才能将数组转换为std::vector。请注意,sizeof只有在编译时知道数组的大小时才有效,至少在不使用C99的情况下是这样,因此不能将其放入函数中。也就是说,这行不通:
template <typename T>
inline std::vector<T> ArrayToVec(const T* in) {
return std::vector<T> (in, in + sizeof(in) / sizeof(T) );
}
as sizeof(in)将返回指针的大小。
1)推荐方法:在调用函数: 时将数组转换为std::vectorstd::vector<unsigned char> (Value, Value + <number of elements in Value>)
我建议您放入一些适当的常量,可能是udtByteFeatures的一部分。顺便说一下,可以定义从udtByteFeatures到std::vector的强制转换。
来源:将数组转换为向量的最简单方法是什么?
2)困难和危险的方法:使用宏转换数组:#define CharArrayToVec(in) (std::vector<char> (in, in + sizeof(in) / sizeof(*in) ) )
(可惜不能在类型上模板化:))
编辑:(可惜不能在类型上模板化:))
实际上你可以把类型作为参数传递。如果有typeof
运算符,你甚至不需要它
Values
不是向量。它是一个数组。它甚至与一个类的实例(std::vector
是)的对象没有任何关系。如果你在谷歌上搜索过"从数组初始化向量",你就会发现数组衰变成指针的事实是非常有用的:
int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
std::vector<int> v(a, a + 10);
for (std::vector<int>::iterator it = v.begin(); it != v.end(); it++)
std::cout << *it << std::endl;
相关文章:
- 如何在向量数组中插入元素?
- 不同大小的向量数组的大小 cpp
- 很好的语法来获取对向量/数组数据的大小引用?
- 指向 c++ 中的向量数组并将其发送到函数的指针
- 初始化向量数组,其中每个向量的大小为 0
- 在这里,当我们比较 if(vc[i]==vc1[i]) 时,它是向量数组. 实际上比较的值是多少,
- 如何使用结构体的向量数组?
- C++:向量数组
- 在C++中通过引用传递向量数组
- 向量数组"Cannot access memory at address"
- 构造不同类型的C++向量数组
- 向量数组的均值和众数 - 如何对函数进行较小的改进
- C++:初始化(新)一个不同初始大小的向量数组
- 五个中三个最大参数的平均值,不使用排序算法或向量/数组
- 销毁C++中的向量数组
- 继承向量/数组/列表并更改其大小
- 如何输出属于向量数组的结构字符串
- 如何通过引用传递向量数组
- 在向量数组中获得前五个最大的结果
- 为什么"new vector<int>[5]"不创建向量数组?