如何将C语言的int数组高效转换为C++ vector容器?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1066个文字,预计阅读时间需要5分钟。
最常用也最安全的做法,是利用 `std::vector` 的迭代器构造函数来创建函数。它接受两个指针(或迭代器),自动复制区间内的所有元素。
常见错误是传错边界:比如把数组长度当结尾指针,导致越界或漏元素;或者误用 &arr[0] 和 &arr[n] 时没确认 n 是真实长度。
- 确保数组非空,否则
&arr[0]合法但&arr[n]可能越界(n == 0时&arr[0]是合法地址,但&arr[0]到&arr[0]是空区间,没问题) -
int arr[] = {1, 2, 3};→std::vector<int> v(arr, arr + 3);</int>,不能写成arr + sizeof(arr) - C++11 起支持统一初始化语法:
std::vector<int> v{arr[0], arr[1], arr[2]}</int>,但只适用于编译期已知长度且元素不多的场景
用 assign() 替换已有 vector 的内容
当你已经有某个 std::vector 实例,想把它重置为 int 数组内容时,assign() 比先 clear() 再 insert() 更高效、更清晰。
本文共计1066个文字,预计阅读时间需要5分钟。
最常用也最安全的做法,是利用 `std::vector` 的迭代器构造函数来创建函数。它接受两个指针(或迭代器),自动复制区间内的所有元素。
常见错误是传错边界:比如把数组长度当结尾指针,导致越界或漏元素;或者误用 &arr[0] 和 &arr[n] 时没确认 n 是真实长度。
- 确保数组非空,否则
&arr[0]合法但&arr[n]可能越界(n == 0时&arr[0]是合法地址,但&arr[0]到&arr[0]是空区间,没问题) -
int arr[] = {1, 2, 3};→std::vector<int> v(arr, arr + 3);</int>,不能写成arr + sizeof(arr) - C++11 起支持统一初始化语法:
std::vector<int> v{arr[0], arr[1], arr[2]}</int>,但只适用于编译期已知长度且元素不多的场景
用 assign() 替换已有 vector 的内容
当你已经有某个 std::vector 实例,想把它重置为 int 数组内容时,assign() 比先 clear() 再 insert() 更高效、更清晰。

