我目前使用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个“子数组”(固定数据和要优化的数据),然后再创建全局数组
编辑:目前,我在C17上受到限制,因为ROS 2还不支持C+20
1条答案
按热度按时间sqxo8psd1#
您是否正在寻找
std::span
?