作業鏈結
github鏈結
在自學的過程還未了解到關於queue
的知識,所以預先google了一下相關知識。
queue模板類的定義在標頭檔案中。queue模板類需要兩個模板引數,乙個是元素型別,乙個容器型別,元素型別是必要的,容器型別是可選的,預設為deque型別。定義queue物件的示例**如下:
queueq1;
queueq2
queue基本操作
queueque;
que.push("hello world!");
que.push("ok");
queque;
que.push("hello world!");
que.push("ok");
que.pop(); //此時"hello world"被刪除
queueque;
cout
cout << que.empty() << endl;
que.push("hello world!");
que.push("ok");
cout << que.empty() << endl; //輸出分別為「1」和「0」
queueque;
q.push("hello world!");
q.push("ok");
cout << que.front() << endl;
que.pop();
cout << que.front() << endl; //輸出為"hello world"和"ok"
queueque;
que.push("hello world!");
que.push("ok");
cout << que.back() << endl; //輸出為"ok"
按照題目要求,將輸入交給scan類,輸出交給print類
#ifndef calculator_h_
#define calculator_h_
#include#includeusing namespace std;
class scan
;class print
; istream &read(istream &, scan &);
#endif
#include#include#include#include "calculator.h"
using namespace std;
/***********************************
description: 讀取並掃瞄表示式,將數字與符號分開壓入佇列
others: 當輸入數學表示式中有數字(含小數字)超過10位即報錯並終止程式
***********************************/
void scan::tostringqueue(string input)
if(tmp.size() > 10)
break;
} if (!tmp.empty())
while (i < len &&
(input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/'
|| input[i] == '(' ||input[i] == ')'))
}}/***********************************
description : 輸出佇列中的資料
***********************************/
void print::output(queueq)
}/***********************************
description:從給定流中 將資料讀到給定的物件中
others: 本意是將此函式包含至scan類中,讓讀入的功能都讓專門的類實現,
但是在實際操作過程中,確頗感困難,所以就獨自定義了乙個類相關的非成員函式
error中的資訊提示我可能是通過非成員函式訪問操作了私有部分的資料,但是回看**的過程頗為迷茫,因為我將print
類與read
函式都設為scan
的友元,所以在試了多次改正的辦法都沒有解決,半天下來也有些心浮氣躁,可能因為書此時看得還是頗少,掌握東西的量還不足,對於一些錯誤無法查詢出來。在google中也並未找到解決的方法。在自學有時還是頗感迷茫的,因為時常出了問題在搜尋的基礎上不足以解決,又無旁人的指點。這個問題也暫且放下,同時也在此作為乙個儲存,等再一步深入學習c++再回頭來解決。
#ifndef calculator_h_
#define calculator_h_
#include#includeusing namespace std;
class scan
;class print
; istream &read(istream &, scan &);
#endif
#include#include#include#include "calculator.h"
using namespace std;
/***********************************
description: 讀取並掃瞄表示式,將數字與符號分開壓入佇列
others: 當輸入數學表示式中有數字(含小數字)超過10位即報錯並終止程式
***********************************/
queuescan::tostringqueue(string input)
if(tmp.size() > 10)
break;
} if (!tmp.empty())
while (i < len &&
(input[i] == '+' || input[i] == '-' || input[i] == '*' || input[i] == '/'
|| input[i] == '(' ||input[i] == ')'))
}return que;
}void print::output(queueq)
}/***********************************
description:從給定流中 將資料讀到給定的物件中
others: 本意是將此函式包含至scan類中,讓讀入的功能都讓專門的類實現,
但是在實際操作過程中,確頗感困難,所以就獨自定義了乙個類相關的非成員函式
***********************************/
istream &read(istream &is, scan &expr)
#include#include#include#include"calculator.h"
int main()
經過第一次的失敗(包含多次試驗失敗)又暫時沒有有效的解決方法後,放棄了原有的思路。在tostringqueue函式編寫中不再使用void型別,因為沒有返回值的同時一定要對private裡面的佇列資料進行訪問,而此時編寫的函式一直訪問失敗,所以直接讓tostringqueue函式返回乙個佇列,這樣在使用print類過程中就無需訪問scan類中的私有資料了。
opp程式設計思想的實現需要去努力理解並且融會貫通,雖然在之前學習有接觸到這個思想,在之前部落格關於鍊錶實現的例項也有提到,但仍需加強理解。資料隱藏作為opp程式設計思想的一大特點,雖然第一次嘗試**中有想著將資料隱藏起來,但是在實現中不盡人意,也沒有解決的方案。
這個作業前後花了不少時間,一開始的計畫是學習關於類等語法知識,然後完成作業。但是在學習的過程中,一開始並沒有動手自己實踐一些**,看書學習的這個過程總是萌生睏意,對於類的知識也是迷迷糊糊,一知半解,浪費了不少時間。最後改變了計畫,一邊動手實踐**一邊看書,但是這樣也有著很大的弊端,因為在程式出問題的時候,沒有對於類的總體把關,很難看出其中錯誤,搜尋的過程也顯得較為費力。總之,「試了很多錯」,在這些錯誤中也了解到一些知識。希望在以後的學習過程中,在多多少少的「試錯」過程中,能盡快找到合適自己的學習方法。現在回看這整個程式,好像都是簡簡單單的**,實現也頗顯簡單,但是完成這份程式又確確實實用了不少時間。所以,這同時給了自己乙個很大的警鐘——路阻且長,仍需更加努力。
第三次作業
2 12有600 mb 兆位元組 的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車這 些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kb s,其結果又如何?解 當傳送速率為2.4k...
第三次作業
1 有600mb 兆位元組 的資料,需要從南京傳送到北京 一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率為2.4kb s 傳送此資料,試比較這兩種方法的優劣。若資訊傳送的速率為33.6kb s,其結果又如何?解 假定連續傳送且不出錯。若...
第三次作業
p67 2 12 有600mb的資料,需要從南京傳送到北京。一種方法是將資料寫到磁碟上,然後託人乘火車將這些磁碟捎去。另一種方法是用計算機通過長途 線路 設資訊傳送的速率是2.4kbps 傳送此資料。試比較這兩種方法的優劣。若資訊傳送速率為33.6kbps,其結果又如何?解 1 t 600 1024...