c++ 围绕std::vector部分的STD Package 器(或替代品)

huwehgph  于 2022-12-20  发布在  其他
关注(0)|答案(1)|浏览(259)

我目前使用std::vector来存储一些数据(注:尺寸在施工时已知,之后不会改变:如果你看到一个比向量更好的结构,这对我来说很好)。在程序的后面,我需要把这个数据的一部分(前N个值)传递给一个优化函数,它会在适当的位置修改它。
一个简单的解决方案是传递一个对整个向量的引用,以及一个索引来指示要优化的部分,但是如果我能避免告诉优化函数(及其子函数)要优化的部分,而只给予它们一个向量/数组/you_name_it,其中只包含要优化的值,那就更好了。
因此,基本上,我希望2个类似于“数组”的对象(都是常量大小,但大小只有在运行时才知道)共享相同的内存。
例如,如果std::vector的成员为public,则简单的解决方案为

std::vector<int> original_vector={0,1,2,3,4,5,6,7,8}
std::vector<int> sub_vector(0);
sub_vector.data=original_vector->data; //point to the same data (nb : there is no public data member, just a data() getter, and as far as I know no setter)
sub_vector.length=3;
//sub_vector now appears to contain {0,1,2}
sub_vector[1]=42;
//oringinal_vector now contains {0,42,2,3,4,5,6,7,8}

另一个解决方案是获取数据指针,然后只传递一个原始的C风格指针+长度给优化函数。但是在C中用C指针表示数组并不好。如果有一个std容器可以用C指针+长度初始化(不复制),这可能是一个很好的解决方案。
还有别的主意吗?
NB:我还没有写优化代码,所以如果方便的话,我也可以把所有要优化的数据放在末尾而不是开头。
注意:如果有不复制数据的方法,也可以先创建2个“子数组”(固定数据和要优化的数据),然后再创建全局数组
编辑:目前,我在C
17上受到限制,因为ROS 2还不支持C+20

sqxo8psd

sqxo8psd1#

您是否正在寻找std::span

std::vector<int> original_vector={0,1,2,3,4,5,6,7,8};
std::span<int> sub_vector(original_vector.begin(), 3);

相关问题