程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++/VC++編程的疑難問題及解答

C++/VC++編程的疑難問題及解答

編輯:關於C++

本人在用C++/VC++編程時,遇到的一些比較難以解決的問題,在經過百思得其解之後,總結了一些解決方法,希望這些經驗之談能對大家有所幫助。

1、[VC問題] 編輯框內的換行?

答:假設要在編輯框內輸出"12345\n6789"。首先要設置編輯框的Multiline屬性為TRUE,在輸出時,除了要加\n,還要有\r。也就是說,如果要12345和6789在兩行顯示,需要輸出12345\r\n6789。代碼如下:

m_strData = "12345\r\n67890"; // m_strData是和編輯框關聯的變量
UpdateData(FALSE); //更新控件

2、[C++標准程序庫的問題] list的迭代器是否可以隨機移動?

答:由於list的內部實現是雙向鏈表,鏈表就要求迭代器(指針)只能依次從前向後(或從後向前)移動,依次移動一個位置,因此list只定義了++和--操作符,而沒有定義+、-、+=和-=等操作符。所以要想list的迭代器移動一段距離,就需要自己編程實現,用一個小循環就行了,代碼如下:

#include <list>
using namespace std;
list myList;
… // myList的初始化及其他操作
list::const_iterator itList = myList.begin();
// itList向前移動len個距離
for ( int i= 0; i < len; i++ )
{
  ++itList;
}
… // 其他操作

3、[C++標准程序庫的問題] 在刪除操作很多的情況下,應該選擇什麼樣的容器?

答:按照標准程序庫的說明,當刪除/插入只發生在容器的尾部時,應該使用vector;當刪除/插入只發生在容器的首/尾部時,應該使用deque;當刪除/插入操作很多,而且刪除/插入不是只在容器的首尾,這時應該選擇list。

但是這裡也有一個問題,在使用list時,由於其迭代器只能一次移動一個位置,在有大量刪除的操作時,需要大量的迭代器移動操作,因此使用list的效率會很低;list的另一個缺點是,占用空間要比同等容量大小的vector要大,這是由於list的實現需要指針,每個元素就多比vector中的元素多兩個指針(雙向鏈表),因此在每個元素都很小(幾個字節),而且元素數量很大時,使用list就非常浪費空間了。

如果使用vector,那麼刪除中間元素會導致大量的元素移動操作,效率也不高,為了解決這個問題,我們可以這樣作:使用vector容器,但是不直接刪除元素,而是再申請一個臨時vector,將原來vector中未刪除的有用元素依次加入/保存到臨時vector,然後用這個臨時vector替換原來的vector,如果實現知道要刪除的元素的個數,那麼可以事先預留臨時vector的空間,再將有用元素存到臨時vector中,代碼如下:

#include <vector>
using namespace std;
vector myVec;
… // myVec的初始化以及其它操作
vector tempVec;
          // 刪除myVec中的num個元素
tempVec.reserve( myVec.size() - num ); // 預留臨時vector的空間
for ( ;; )
{
  將myVec中的有用元素存到tempVec中;
}
myVec.swap( tempVec ); // myVec的容量等於或稍大於myVec.size()
… // 其它操作

這只是我目前總結的幾個問題,以後遇到問題隨時解決,隨時總結。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved