我不确定如何构建标题,但解释更简单.我正在使用c ++ 11 range for loops(链接).
我写了以下内容:
for(auto &elem:vec){
elem/=vec[0];
}
Run Code Online (Sandbox Code Playgroud)
哪个编译但不会改变向量'vec'中的任何内容.
另一方面,这有效:
elem0 = vec[0];
for(auto &elem:vec){
elem/=elem0;
}
Run Code Online (Sandbox Code Playgroud)
这是预期的吗?第一种方法有什么问题?如果有帮助,我的编译器版本是g ++ 4.6.3.
从数组初始化向量的直接方法似乎是:
int sizeArr; int * array = getArray(sizeArr);
std::vector<int> vec(array, array+sizeArr);
Run Code Online (Sandbox Code Playgroud)
在这里,我从一个函数获取数组,该函数分配内存中的空间并sizeArr通过引用进行设置。{start edit}不幸的是,该函数不是我编写的,我需要处理C样式数组,然后以某种方式将其转换为向量。(如果可能有效的话)。{结束编辑}
当我初始化时vec,显然我正在为其单独分配空间。如果我不想array再使用数据了,是否可以以某种方式“移动”指向array向量的数据vec,而不为它单独分配任何空间?
我正在尝试减少为我的用例计算reduce_by_key所需的内存.与值的数量(约1600万)相比,我有一个相对较少的唯一键(大约100-150).按键缩减示例显示分配给包含结果的device_vectors与输入的大小相同.是否总是有必要这样做?是否可以只分配尽可能多的内存来包含正确的输出?