c++将数组强制转换为可变大小的向量

C++ casting an array to a variably size vector

本文关键字:向量 数组 转换 c++      更新时间:2023-10-16

我想知道是否有一个简单的解决方案将数组转换为可变大小的向量。

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::vector
std::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;