1樓:曹糯糯
string用的是動態記憶體,也就是他是按需分配的,不需要的部分會及時被釋放。需要的時候再從動態記憶體裡去分配。
c應該也可以實現。比如用連結串列方式,初始時只有頭元素。讀入乙個字元就分配乙個節點(用malloc函式)直到讀入結束。
這樣的話實際消耗的記憶體要比字元個數多很多。因為乙個節點不光是資料本身,還有指標資訊。 不需要繼續使用該string時應該用free函式釋放掉記憶體。
以便分配給其他動態變數
2樓:匿名使用者
我來回答第二個問題,程式的確只分配了乙個字元的空間,居然可以收到任意長的字串,看樣子程式可以工作,其實這是大錯特錯,因為c++沒有在記憶體越界方面做太多工作,當我們寫入到乙個非法的位址時,運氣好可以工作(因為那段位址剛好沒有人用),運氣不好,就會出現記憶體非法訪問(violate access)的提示,從而引起程式崩潰。所以這種**是萬萬不能要的。
3樓:匿名使用者
#include
#include
#include
#include
#include
using namespace std;
int main()
//讀入文字
ifstream ins("text.txt");
ofstream ous("text.txt");
map::iterator iter=my_map.begin();
for(;iter!=my_map.end();iter++)for(map::
iterator itr=your_map.begin();itr!=your_map.
end();itr++)
return 0;}
4樓:夜遊神小翠
記憶體分配方式可以看作有以下三種:
(1) 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。
(2) 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。
(3) 從堆上分配(heap),亦稱動態記憶體分配。程式在執行的時候用malloc 或new 申請任意多少的記憶體,程式設計師自己負責在何時用free 或delete 釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。
c++中提供的string類以及new運算子分配動態記憶體都是屬於第三種情況,分配動態記憶體的「按需分配」並不是像陣列一樣,陣列要分配一塊連續的位址空間,所以必須事先知道你要多大的位址空間,才能決定是否有那麼大的空給你分配。這裡所說的「按需」,就是你每增加乙個元素,再自動給你增加一塊空間,原理是通過動態連結串列,連結串列並不要求記憶體空間連續,只要由指標值把它們連線起來就行了。訪問時,你得用指標去訪問它,不能通過變數名訪問,因為它是動態連結串列。
c如何撒string中的字元,c如何取出string中的第乙個字元?
include include using namespace std int main c s.str 0 c string 0 c 怎麼取字串的第乙個字元 直接用下標0就行了 string s hello s 0 就是h strings abcde const char p s.c str ch...
C中怎麼將String型別(時間的text)轉換成Data型別
string型別可以通過convert和parse方法轉換成datetime型別。比如string datestring 2011 03 06 datetime date convert.todatetime datestring 或 datetime date datetime.parse dat...
c中if條件裡連線string型別的字元是什麼
if txtsearchfrom.text chufadi txtsearchto.text mudidi 這樣就對了 注意比較是用雙等號 賦值是用等號 要和vb語法區別開,在vb中等號出現在條件語句中則為比較,其他地方為賦值,不要混淆。那兩個字串是chufadi和mudidi 答案補充 等於號要加...