精选文章

Android下使用TCPDUMP抓包Wireshark分析数据 如果想分析Android下某个APP的网络数据交互,需要在Android手机上抓包,最常用的抓包工具非tcpdump莫属,用tcpdump生成Wireshark识别的pcap文件,然后将pcap文件下载到电脑上,用电脑上的Wireshark加载pcap文件,通过Wireshark分析tcpdump抓取的数据。...

继续阅读

Mac下部署Android开发环境附加NDK 作为开发者,我们深有体会,不管是进行什么开发,为了部署开发环境,我们往往需要折腾很长时间、查阅很多资料才能完成,而且这次折腾完了,下次到了另一台新电脑上又得重新来过,整个部署过程记得还好,要是不记得又得重新开始,而且遇到Android这种GFW阻隔了开发资源下载链接的环境部署,又尤其浪费时间。所以这也是我写下这篇教程的初衷跟动力源泉,希望大家参考了这篇教程以后可以轻轻松松在Mac系统下将Android环境部署好。...

继续阅读

稍顯嚴肅的台中 坦白說,留在腦海中的台中影像並不多,來台灣之前在Booking上只訂到了台中的一家青旅,第一次住青旅有些不習慣,幹什麼都放不開。 同屋的一個男生是台灣人,不過一年中四分之三的時間在上海跟北京,這麼說來跟我還是比較有共同話題的。得之我準備花15天的時間環島,覺得太倉促了,他們大學時期花一個半月的時間也不見得能將台灣島給逛完。我只能無奈地表示,兩岸允許的簽證時間有限,自己的空閒時間更有限,只能用打卡式的旅行了,我深知正真地旅行應該慢下來,融入當地的環境,感受他們的風土人情,但第一次只能這樣作罷,以後換成民進黨上台,形勢會變成怎樣還不得而知,能否再過來還是個未知數。而我一向信奉的人生格言是秉燭夜遊,活在當下,所以,理解自己吧。...

继续阅读

為之留戀的新竹 來新竹之前本沒有對她有過高的期待,慢慢對她加分要從桃園火車站出發前往新竹開始。 在桃園火車站的候車月台上,有醒目的旅遊資料發放處,這上面的擺放的全是新竹的旅遊宣傳資料,關鍵的是資料做得非常簡潔易懂,而接下來一天的新竹之行就全部是依據這份寶典的指引來完成的。...

继续阅读

從桃園開始台灣之行 初到台灣恰逢華夏銀行系統升級,特意準備的華夏銀聯卡在桃園機場沒能派上用場,只好用建行在機場5000塊,算下來是很不划算的,但是沒辦法,誰叫我出機場就得花錢呢。 從機場打車到桃園的酒店,花了將近六百塊新台幣,到酒店時五點多,天已經漸亮了,洗漱完等到七點吃過早餐就開始補覺囉,一覺醒來已是中午,帶著換下來的衣服外出找自助洗衣店,順便覓食。...

继续阅读

  • Prev
  • Next

数值算法实例

2

文章分类 : C++, 泛型算法

数值算法属于C++泛型算法中的一种,为容器的元素执行不同的数学计算。这些算法包括accumulate, adjacent_difference, inner_product, iota, partial_sum, power,下面用程序实例演示每一个算法。

1、accumulate——返回指定区间内所有元素和与指定值之和

#include <iostream>
#include <vector>
#include <numeric>
using namespace std; 

int main ()
{
     int arr[] = { 1,2,3,4,5 };
     vector<int> v(arr,arr+5);

     // 1+2+3+4+5 and + 0
     int sum = accumulate(v.begin(), v.end(), 0);
     cout << "sum = " << sum << endl; 

     return 0;
}
运行结果:
// sum = 15

2、adjacent_difference——对指定区间内的相邻元素按照指定函数的方法执行计算,并将结果存入指定地址开始的区间中,如果未指定函数及存储地址则默认做减法并将结果存入原区间

#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
using namespace std; 

int main ()
{
    vector i(10);
    vector result( i.size() );

    for ( int j = 0; j < 10; j++ )
        i[j] = (j+1); 

    adjacent_difference(i.begin(), i.end(),
            result.begin(), multiplies<int>());
    ostream_iterator iter (cout, " "); 

    cout << "vector  i     : ";
    copy (i.begin(), i.end(), iter);
    cout << endl; 

    cout << "vector result : ";
    copy (result.begin(), result.end(), iter);
    cout << endl; 

    return 0;
}

运行结果:
//  vector  i     : 1 2 3 4 5 6 7 8 9 10
//  vector result : 1 2 6 12 20 30 42 56 72 90

3、inner_product——计算两个输入序列的内积,默认情况下,inner_product算法使用+和*运算符,通过把函数对象作为参数传递给inner_product,便可以使用其它运算符;

#include <iostream>
#include <list>
#include <algorithm>
#include <numeric>
using namespace std;

int main()
{
    list<int> li;

    for ( int i = 1; i <= 6; i++ )
        li.push_back(i);
    copy(li.begin(),li.end(),
        ostream_iterator<int>(cout," "));
    cout << endl; 

    /*  (0 + 1*1 + 2*2 + 3*3 + 4*4 + 5*5 + 6*6)  */
    cout << "inner product: "
         << inner_product
           (li.begin(), li.end(), // 第一区间
            li.begin(),           // 第二区间
            0)                    // 初始值
         << endl; 

    /* (0 + 1*6 + 2*5 + 3*4 + 4*3 + 5*2 + 6*1) */
    cout << "inner reverse product: "
         << inner_product
            (li.begin(), li.end(), // first range
             li.rbegin(),          // second range
             0)                    // initial value
         << endl; 

    /* (1 * 1+1 * 2+2 * 3+3 * 4+4 * 5+5 * 6+6) */
    cout << "product of sums: "
         << inner_product
            (li.begin(), li.end(), // first range
             li.begin(),           // second range
             1,                    // initial value
             multiplies(),    // inner operation
             plus<int>())        // outer operation
         << endl;

    return 0;
}
运行结果:
//  1 2 3 4 5 6
//  inner product: 91
//  inner reverse product: 56
//  product of sums: 46080

4、iota——为指定区间的元素赋值,区间内的每一个元素从指定的值开始,呈现递增状态;

#include <iostream>  
#include <vector>
#include <numeric> 

int main()
{ 
  vector<int> V(10); 

  iota(V.begin(), V.end(), 1);  
  copy(V.begin(), V.end(),
       ostream_iterator<int>(cout, " "));
  cout << endl; 

  return 0;
}
运行结果:
//  1 2 3 4 5 6 7 8 9 10

5、partial_sum——对指定区间的元素求部分和,如果将指定函数作为参数,可以按照指定函数的运算法则求部分结果;

#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
using namespace std; 

int main()
{
    vector<int> v(5);
    iota(v.begin(),v.end(),1);
    copy(v.begin(),v.end(),
        ostream_iterator<int>(cout," "));
       cout << endl; 

    //输出部分和
    partial_sum (v.begin(), v.end(),  // source range
       ostream_iterator<int>(cout," ")); // destination
    cout << endl; 

    // 输入部分积
    partial_sum (v.begin(), v.end(),  // source range
        ostream_iterator<int>(cout," "), // destination
        multiplies<int>());              // operation
    cout << endl;

    return 0; 
} 
运行结果: 
// 1 2 3 4 5 
// 1 3 6 10 15
// 1 2 6 24 120

6、power——返回指定值的指定次方幂

#include <iostream>
#include <numeric>
using namespace std; 

int main() 
{ 
  cout << "2 ** 30 = " << power(2, 30) << endl;

  return 0;
}
运行结果: 
// 2 ** 30 = 1073741824

除非注明,文章均为CppLive 编程在线原创,转载请注明出处,谢谢。

本文地址:https://www.cpplive.com/html/372.html

评论 (2)

  • 园子 says:

    这些算法我都忘记的差不多了。

  • 这里因为你的留言而存在!!!

    You must be logged in to post a comment.