C ++将数组转换为可变大小的向量

时间:2013-06-19 06:05:21

标签: c++ vector

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

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

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

谢谢!

2 个答案:

答案 0 :(得分:1)

只有知道数组的大小,才能从数组转换为std :: vector。请注意,只有在编译时已知数组的大小时,sizeof才有效,至少在use 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)Reccomended方法:调用函数时将数组转换为std :: vector:

std::vector<unsigned char> (Value, Value + <number of elements in Value>)

我建议您输入一些适当的常量,也许是udtByteFeatures的一部分。顺便说一下,从udtByteFeatures到std :: vector定义一个强制转换是可能的。

来源: What is the simplest way to convert array to vector?

2)困难和危险的方式:使用宏转换数组:

#define CharArrayToVec(in) (std::vector<char> (in, in + sizeof(in) / sizeof(*in) ) )

(太糟糕了,不能在类型上模板:))

修改

  

(太糟糕了,不能在类型上模板:))

实际上你可以将类型作为参数传递。 如果有typeof运算符,您甚至不需要它。

答案 1 :(得分:0)

Values不是矢量。这是一个阵列。它甚至与作为类的实例(std::vector是)的对象无关。如果您搜索过Google“从数组初始化向量”,you would have found out数组衰减为指针的事实非常有用:

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;