我试图避免重新实现我自己笨拙的标准算法版本,因此我正在使用标准库版本。由于我不是 C++ 方面的专家,因此我谨慎行事并打开了完整的调试选项。
具体来说,我在 valarray
容器上使用二进制搜索。下面的代码块似乎产生了正确的结果,valgrind
没有提示。尽管如此,我确实觉得我在一个滑坡上,因为我不确定我正在做的事情是否真的被允许,或者我只是被编译器放出来了。
有代表性的一段代码:
#include <iostream>
#include <valarray>
#include <algorithm>
#include <typeinfo>
using namespace std;
int main(){
valarray<double> v(10);
for (int i=0 ; i<10 ; ++i){
v[i]=2. *i ;
cout<<v[i]<<" ";
}
cout << "\n";
double what=17;
double* it=lower_bound(&v[0], &v[10],what) ;
cout<<it-&v[0]<<" "<<typeid(&v[0]).name()<<" ";
cout<<typeid(it).name()<<" "<<typeid(it-&v[0]).name()<<"\n"; // ???
int idx=it-&v[0];
cout<<"v["<<idx<<"]="<<v[idx]<<"\n";
}
问题:
???
注释一致) 最佳答案
int
索引到 valarray
。这对这个例子是有效的,但不是一般的。使用 std::size_t
索引到 valarray
。 (std::vector
和普通数组也是如此。) int
或 long
并且总是足够小以适合 std::ptrdiff_t
。 关于c++ - 使用带有 valarray 的 C++ 标准库算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5240267/