我試圖避免重新實現我自己笨拙的版本的標準算法,因此正在玩標準庫版本。由於我不是C++的專家,因此我謹慎行事,開啓全面的調試選項。使用C++標準庫算法與valarray
具體而言,我在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";
}
問題:
- 是我在這裏做什麼真的合法嗎?
- 兩個指針變爲double的區別是什麼? (符合
???
評論) 類型轉換的開銷是多少? --- I am與效率有關,因爲這種功能將會佔用佔用90%以上計算時間的代碼部分。
我修復了我的答案,不完全錯誤,我認爲它也是完整的。 – Omnifarious 2011-03-09 01:35:49