0

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

double CApp::GetTargetCost(const vector<unsigned char> &uHalfphoneFeatureVector_Bytes,const vector<unsigned char> &uTargetFeatureVector_Bytes)

我想通过

struct udtByteFeatures
{
    unsigned char Values[52];
};

到这个函数,但 C++ 不喜欢它具有固定大小的事实。它需要一个可变大小的向量。

我得到的错误是

error C2664: 'CApp::GetTargetCost': Conversion of parameter 1 from 'unsigned char [52]' to 'const std::vector<_Ty> &' not possible

我还不确定以后是否会使用固定尺寸,但目前我只是想保持灵活。

谢谢!

4

2 回答 2

1

只有知道数组的大小,才能将数组转换为 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) );
  }

在这种情况下,因为 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操作员,您甚至都不需要它。

于 2013-06-19T07:29:36.083 回答
0

Values不是向量。这是一个数组。它甚至与作为类实例的对象(它std::vector是)没有远程关系。如果您在 Google 上搜索“从数组初始化向量”,您会发现数组衰减为指针这一事实非常有用:

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;
于 2013-06-19T06:11:34.057 回答