将数组插入到向量不起作用



我有一个uint8_t数组,我想将其插入到向量 vec 中,代码是这样的:

uint8_t arr[] = { 1,2,3 };
std::vector<uint8_t> vec;
vec.insert(vec.begin(), arr, arr+3);
for (auto t : vec) {
std::cout << unsigned(t) << " ";
}

这在 http://cpp.sh/中工作正常,但是当我将其移动到我的实际代码中时,编译器会抛出错误:

error: no matching member function for call to 'insert'
buffer.insert(buffer.end(), hdr->send_data, hdr->send_data + hdr->data_len);
~~~~~~~^~~~~~
external/libcxx/include/vector:721:9: note: candidate function not viable: 'this' argument has type 'const std::vector<uint8_t>' (aka 'const vector<unsigned char>'), but method is not marked const
insert(const_iterator __position, _ForwardIterator __first, _ForwardIterator __last);
^
external/libcxx/include/vector:700:14: note: candidate function not viable: 'this' argument has type 'const std::vector<uint8_t>' (aka 'const vector<unsigned char>'), but method is not marked const
iterator insert(const_iterator __position, size_type __n, const_reference __x);
^
external/libcxx/include/vector:704:14: note: candidate template ignored: disabled by 'enable_if' [with _InputIterator = const unsigned char *]
__is_input_iterator  <_InputIterator>::value &&
^
external/libcxx/include/vector:692:14: note: candidate function not viable: requires 2 arguments, but 3 were provided
iterator insert(const_iterator __position, const_reference __x);
^
external/libcxx/include/vector:694:14: note: candidate function not viable: requires 2 arguments, but 3 were provided
iterator insert(const_iterator __position, value_type&& __x);
^
external/libcxx/include/vector:724:14: note: candidate function not viable: requires 2 arguments, but 3 were provided
iterator insert(const_iterator __position, initializer_list<value_type> __il)

这段代码是在Android AOSP中构建的,cflags是-std=C++11。我检查了标题,它似乎遵循了C++标准。

候选函数不可行:"this"参数的类型为"const std::vector"(又名"const vector"),但方法未标记为const

您可能正在尝试从标记为const的方法修改buffer成员。

要么从方法中删除const签名,要么使用mutable关键字(但这取决于类方法的目的,请注意)。

这与你最初的问题有点切线,你现在显然可以工作,因为它是非常量,但是将 C 样式数组复制到std::vector的更安全方法是与你已经拥有的数组略有不同。

std::vector<uint8_t> vec;
uint8_t arr[] = { 1, 2, 3 };
size_t arrSize = sizeof(arr) / sizeof(uint8_t);
vec.insert(vec.end(), arr, arr + arrSize);

此方法适用于任何类型的对象,而不仅仅是uint8_t并且由于您正在计算大小,您不必考虑arr[]有多少元素。

最新更新