本人在用c++/vc++程式設計時,遇到的一些比較難以解決的問題,在經過百思得其解之後,總結了一些解決方法,希望這些經驗之談能對大家有所幫助。
vc問題,編輯框內的換行;
c++問題標準程式庫的問題,list的迭代器是否可以隨機移動?
c++問題標準程式庫的問題,在刪除操作很多的情況下,應該選擇什麼樣的容器?
1、[vc問題] 編輯框內的換行?
答:假設要在編輯框內輸出"12345/n6789"。首先要設定編輯框的multiline屬性為true,在輸出時,除了要加/n,還要有/r。也就是說,如果要12345和6789在兩行顯示,需要輸出12345/r/n6789。**如下:
m_strdata = "12345/r/n67890"; // m_strdata是和編輯框關聯的變數2、[c++標準程式庫的問題] list的迭代器是否可以隨機移動?updatedata(false); //更新控制項
答:由於list的內部實現是雙向鍊錶,鍊錶就要求迭代器(指標)只能依次從前向後(或從後向前)移動,依次移動乙個位置,因此list只定義了++和--操作符,而沒有定義+、-、+=和-=等操作符。所以要想list的迭代器移動一段距離,就需要自己程式設計實現,用乙個小迴圈就行了,**如下:
#include using namespace std;3、[c++標準程式庫的問題] 在刪除操作很多的情況下,應該選擇什麼樣的容器? 答:按照標準程式庫的說明,當刪除/插入只發生在容器的尾部時,應該使用vector;當刪除/插入只發生在容器的首/尾部時,應該使用deque;當刪除/插入操作很多,而且刪除/插入不是只在容器的首尾,這時應該選擇list。list
mylist;
… // mylist的初始化及其他操作
list
::const_iterator itlist = mylist.begin();
// itlist向前移動len個距離
for ( int i= 0; i < len; i++ )
… // 其他操作
但是這裡也有乙個問題,在使用list時,由於其迭代器只能一次移動乙個位置,在有大量刪除的操作時,需要大量的迭代器移動操作,因此使用list的效率會很低;list的另乙個缺點是,占用空間要比同等容量大小的vector要大,這是由於list的實現需要指標,每個元素就多比vector中的元素多兩個指標(雙向鍊錶),因此在每個元素都很小(幾個位元組),而且元素數量很大時,使用list就非常浪費空間了。
如果使用vector,那麼刪除中間元素會導致大量的元素移動操作,效率也不高,為了解決這個問題,我們可以這樣作:使用vector容器,但是不直接刪除元素,而是再申請乙個臨時vector,將原來vector中未刪除的有用元素依次加入/儲存到臨時vector,然後用這個臨時vector替換原來的vector,如果實現知道要刪除的元素的個數,那麼可以事先預留臨時vector的空間,再將有用元素存到臨時vector中,**如下:
#include using namespace std;vector
myvec;
… // myvec的初始化以及其它操作
vector
tempvec;
// 刪除myvec中的num個元素
tempvec.reserve( myvec.size() - num ); // 預留臨時vector的空間
for ( ;; )
myvec.swap( tempvec ); // myvec的容量等於或稍大於myvec.size()
… // 其它操作
Visual C 程式設計疑難問題解
前言 程式設計中遇到的問題很多,再優秀的程式設計師也不會沒有問題,但很多解決方法被淹沒在論壇浩瀚的 水 中了,為了便於同道查詢同時儲存這些精華,我將在實際程式設計中常見的問題以及論壇中優秀的回貼收集起來以專題的形式發表。本文中的所有問題及回答均來自論壇。問題一 如何實現指定碟符的光碟機彈出彈入 鑰匙...
生產遇到的疑難問題彙總
一 有乙個這樣的需求,統計出在每個國家的銷量並排序,所得的結果應該包含國家 銷量 排名等字段。排序好辦,有乙個問題是如何新增排名這個字段,可以有如下幾種方式,假設對銷量排序的結果是中間表temp,包括國家 delivery country 銷量 sale count 兩個字段。1 通過select子...
python中遇到的疑難問題解釋
tkinter中,乙個控制項可能屬於另乙個控制項,這時另乙個控制項就是這個控制項的master。預設乙個視窗沒有master,因此master有none的預設值。總而言之 元件的master屬性即指代該承載該元件的父容器 tk,frame等 乙個有繼承關係的類 class frm frame def...