2015-10-02 84 views
1

我負責編寫一個在終端中創建一種文本編輯器的C++程序。文本編輯器由單獨的行組成。每條線都必須代表鏈接列表的成員。我遵循製作兩個課程的格式。一個是一行「列表」,另一個是行的類。他們是朋友班。對於每一個新行,創建一個行對象並將其添加到鏈接列表中。行類的「列表」通過執行諸如插入行和從鏈表中刪除行的操作來管理行對象和鏈接列表。矢量,字符串或數組?

我的問題是,對於每個單獨的行,我應該將它存儲爲字符數組,字符串還是矢量?

還應該注意的是,行被添加到鏈接列表後不需要可編輯。它們可以被刪除並且可以插入一個新行。 只有三種操作是可能的。將整行插入列表中,將一行添加到列表的末尾,並從列表中刪除現有行。創建並添加到列表後,任何給定行的內容都不會被更改。

一些示例輸出,我是給定:

1> The first line 
2> The second line 
3> 
4> And another line 
5> One more line 
6> 
7> what do you try to type here? 
8> 
9> 
10> 
11> This is the last line 
> I 2 ↵ 
2> This line should be inserted into line number 2 
> L ↵ 
1> The first line 
2> This line should be inserted into line number 2 
3> The second line 
4> 
5> And another line 
6> One more line 
7> 
8> what do you try to type here? 
9> 
10> 
11> This line is boring...... 
12> This is the last line 
> I 16 ↵ 
16> The line number is big BIG 
> L ↵ 
1> The first line 
2> This line should be inserted into line number 2 
3> The second line 
4> 
5> And another line 
6> One more line 
7> 
8> what do you try to type here? 
9> 
10> 
11> This line is boring...... 
12> This is the last line 
13> 
14> 
15> 
16> The line number is big BIG 
+0

「我的問題是,對於每一行,我應該將它存儲爲字符數組,字符串還是矢量?」這真的取決於用法。您想要按行執行的所有可能操作的列表是什麼?例如:你是否希望能夠插入一行中間?你想刪除一行的一部分嗎?另外,你有限制嗎?最大線數或最大線長?請開始準確告訴您要在線路上執行哪些操作。 –

+1

這是一個文本編輯器,所以字符串看起來很合適(對於簡單的實現)。 –

+0

提示:考慮讓你的程序使用'std :: list '工作,然後如果你的任務需要它編寫你自己的具有類似接口的替代列表類(完全相同可能有點困難,因爲它可能需要執行'迭代器,這不是一個初學者友好的問)。 –

回答

5

什麼代表你的實際數據的最佳視圖。

實際數據是一個字符串嗎?使用std :: string。它是一個固定大小的元素的固定大小的數組嗎?使用std :: array。它是固定大小元素的可變大小數組嗎?使用std :: vector。

在處理文本時,我會選擇std :: string(或它支持unicode的變體),並且vector/array操作通常會假定統一的元素。

1

在這種情況下,我的第一個選擇是const std::string。你需要Unicode字符嗎?在這種情況下,要麼使用UTF8,要麼使用帶有const std::wstring的UTF16。

順便說一句:只是因爲我經常看到它。不要實現你自己的鏈表。首選std::list。它通常比YetAnotherLinkedListImplementationIDidMyselfAndAmProudOf更好地測試。考慮使用std::vector而不是std:list,因爲在現代計算機中,內存比CPU慢得多,所以更可預測的內存訪問模式可以否決O() - 複雜類。請參閱Bjarne Stroustrups talk at GoingNative 2012

+0

儘管我不想實現我自己的鏈表,但我不得不這樣做,因爲這是我正在參加的課程的一項任務。 – FlashDrive

+0

在這種情況下,作爲練習,當然要實施自己的鏈表。 – cdonat