gpt4 book ai didi

c++ - 将数字数组动态设置为数组或容器 C++

转载 作者:行者123 更新时间:2023-11-28 02:55:16 24 4
gpt4 key购买 nike

我正在寻找方法以尽量减少每次我喜欢声明数组的需要定义硬编码数组,例如,如果我需要将数字设置为 vector 元素数组

我需要:其中:

std::vector<std::vector<int> > LineVectorBasic;
int arr1[] = {0,2 ,1,2 ,2,2 ,3,2 ,3,2};
LineVectorBasic.insert(LineVectorBasic.begin() + 0,setLineVector(arr1));
int arr2[] = {0,2 ,1,2 ,2,2 ,3,2 ,3,2};
LineVectorBasic.insert(LineVectorBasic.begin() + 1,setLineVector(arr2)); // X 5 or what ever ....
....
....
std::vector<int> LinesManager::setLineVector(int values[])
{
std::vector<int> templine;
for(int i=0; i<sizeof(values);i++)
{
templine.insert(templine.begin() + i, values[i]);
}
return templine;
}

能再短点吗?

最佳答案

首先这个函数是错误的

std::vector<int> LinesManager::setLineVector(int values[])
{
std::vector<int> templine;
for(int i=0; i<sizeof(values);i++)
{
templine.insert(templine.begin() + i, values[i]);
}
return templine;
}

sizeof(values) 不等于作为参数传递给函数的数组中的元素数。它等于 sizeof( int * ),取决于使用的平台,它是 4 或 8 字节,您应该显式地将此数组元素数传递给函数。

你可以写简单的表达式而不是函数

std::vector<int>( std::begin( arr ), std::end( arr ) );

这就够了。

此外,您甚至不需要使用数组。你可以写

std::vector<int>( {0,2 ,1,2 ,2,2 ,3,2 ,3,2} );

此外,如果用于初始化 vector 的数组具有相同的大小,那么最好使用标准类 std::array,因为您可以为其分配新的初始化列表。例如

std::array<int, 10> arr = {0,2 ,1,2 ,2,2 ,3,2 ,3,2};
std::vector<int>( std::begin( arr ), std::end( arr ) );
arr = { 5,2 ,3, 4 ,2, 2, 1, 2 ,6,2};
std::vector<int>( std::begin( arr ), std::end( arr ) );

关于c++ - 将数字数组动态设置为数组或容器 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22145337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com