标准方式::向量<double>借用双倍[]的内容
Standard way of std::vector<double> borrowing the contents of a double[]
是否有一个符合标准的C++(最好是C++11)成语,我可以使用它来允许std::vector<double>
借用已知大小的double[]
的内容?
我有一个带有原型的函数(实际上是一个伪装成优化器回调的函子):
double MyFunctorClass::operator()(double s[]) const;
(MyFunctorClass
也有m_size
,它揭示了s
元素的数量)。
我想调用一个将const std::vector<double>&
作为输入的函数。
一种解决方案技术涉及我创建一个 std::vector<double>
成员变量并以某种方式将double[]
数据切换到该std::vector
的数据区域,调用函数,然后将其切换回调用方。出于性能考虑,我宁愿不复制:它是目标函数。有什么想法吗?
不,你不能那样做。
std::vector
为堆上存储的内容分配空间(并拥有它),因此您不能强制它使用自己的内存。
我所说的"使用你自己的内存"是指"你自己的内存,其中包含有效的内容,除非你明确说明,否则它被保留下来,永远不会被容器触及"。当然,您可以通过覆盖"分配器"参数来定义自己的内存分配策略,但在这种情况下这不是解决方案。
更改函数以接受模板化的开始和结束迭代器
而不是void foo( std::vector<double> vd )
使用template<typename Iter> void foo( Iter begin, Iter end )
这将允许您传入任何标准容器或指针。
像这样迭代:
while( begin!=end ) {
/*const?*/ double& value = *begin;
// whatever you were going to do
++begin;
}
如果要临时存储到向量中的double[]
没有特定的分配约束,则可以使用第二个std::vector<double>
并使用std::swap(vec1, vec2)
进行快速元素交换。然后要从任何向量中获得double[]
,只需执行&vec[0]
.
- 写入向量<向量<bool>>
- 函数向量_指针有不同的原型,我可以构建一个吗
- std::向量与传递值的动态数组
- 将值指定给向量(2D)的向量中的某个位置
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 如何使用向量的template_back函数
- 尝试通过多个向量访问变量时,向量下标超出范围
- 如何通过派生类函数更改基类中的向量
- C++从另一个类访问公共静态向量的正确方法是什么
- 如何将ampl中的集合表示为c++中的向量
- 变量没有改变?通过向量的函数调用
- 迭代时从向量和内存中删除对象
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 计算排序向量的向量中唯一值的计数
- 矩阵向量乘法(cublasDgemv)返回零
- EASTL矢量<向量<int>>连续的
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 将图像加载到Mat-vvector<向量<垫子>>