uj5u.com熱心網友回復:
在Vector<string> con之后,不能直接通過:vector[0] = "aa"
vector[1] = "bb"等進行賦值,這樣會導致越界。(下標是修改不是插入,如果要用下標,需要保證初始化時候有足夠的元素,一般用push_back())
首先使用 resize(n) 陳述句將vector的size調整為初始長度,然后就可以通過以上方式進行賦值了。關鍵是學會借助resize()函式設定容器的初始長度。
另外一種辦法,那就是Vector<string> vector之后,進行呼叫vector的push_back("aa")方法向vector中添加資料,該方法會自動申請記憶體,這樣vector的size就可以逐步增加,不會越界。
在使用容器的時候,很多都是根據判斷符合某些條件才往容器中通過push_back()函式添加元素,但是可能到頭來從未有過符合條件的,也就是說并沒有往容器中添加任何一個元素,此時如果通過下標訪問容器如v[n-1]或者通過某些函式訪問容器如v.back()、v.front()等都會出現下標越界的錯誤(記憶體溢位)
因為v中根本沒有存放任何元素,v的長度或者說v.size()等于0,因此類似v[n-1]、v.front()等是沒有意義的,所以會出現錯誤,這是容易忽略的地方。假如非得使用如上述下標訪問或者容器的某些函式,可以先添加一個if的判斷條件if (!v.empty()),即v非空的情況下上述的訪問操作才是可行的。
uj5u.com熱心網友回復:
vector多載了[]運算子,vtData[0]實際上是個運算子函式呼叫,所以&vtData[0]并不會回傳vtData的第0個元素的地址。也不應該用memcpy去直接操作vector物件。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/284140.html
標籤:C++ 語言
