-
向量中的元素確實連續儲存在記憶體中。 vector 的實現由動態陣列組成。 當空間不足時,使用類似於 C 的 realloc 函式。
重新分配空間。 由於向量中的元素是連續儲存的,因此向量支援在恆定時間內隨機訪問元素。 向量中的迭代器屬於隨機訪問迭代器
如果向量儲存字串型別。 情況是一樣的。 需要注意的是,字串型別不是簡單的 char 陣列。
字串中的陣列也是動態分配的。 為了方便起見,您可以理解(不完全)當向量儲存字串型別時,陣列中實際上有很多 char* 指標,並且每個指標都指向字串字元的內容。 可以給你乙個簡單的圖表。
vector |
v v v v
s1 s2 s3 s4
至於你說的投射到記憶中是什麼意思,我不太明白你想說什麼,所以我不知道該怎麼說。
-
這不合適......朋友。強制容器複製是沒有意義的,你仍然無法獲得連續資料。 而且,你認為字串空間是連續的嗎?
字串的內容也是動態分配的,不僅沒有意義,而且這樣做是錯誤的。
-
不,如果資料很多,就會分成幾塊記憶體。
而字串是乙個類,不能用作記憶體副本。
-
是的,完全沒有問題。 程式的主要問題是:
1.如果模板內部有模板,則兩者必須“分開,否則會誤認為移位運算子和錯誤”。 這是乙個容易犯的錯誤。
所有相似向量> n,d; 語句統一改為向量<向量>n,d;
2.在類外部定義 send 函式時,不會新增範圍識別符號。
您已經清空了 m,並且無法輸入空模板。
如果向量儲存字串型別。 情況是一樣的。 需要注意的是,字串型別不是簡單的 char 陣列。 字串中的陣列也是動態分配的。
我的回答可供您參考,謝謝。
-
你只需分配乙個值。 這是對位址的引用。 真正的內容分配是;
-
vectorsp;
string str;
vector 使用 string* 定義 sp; 您要儲存的資料型別為 string ; 型別不匹配(將 vectorsp 更改為 vectorsp)。
在 C++ 中,std::string 通常採用字串而不是字串* 的形式
-
區域性變數分配在堆疊上,函式呼叫前的堆疊指標應與函式返回後的堆疊指標相同,否則會出現錯誤。
如何分配可以自己編寫乙個小測試程式。
void test(void)
char i,a[10];
printf("0x%x", &i);
printf("0x%x", a);
printf("0x%x", a+1);
printf("0x%x", a+2);
printf("0x%x", a+3);
可能還存在對齊問題,您可能會看到分配的位址不連續。
void test(void)
char i;
int j;
printf("0x%x", &i);
printf("0x%x", &j);
如果看到位址不是連續的,比如說4個位元組對齊,i占用了乙個位元組,還剩3個位元組,j需要4個位元組,剩下的3個位元組不能容納j,剩下的3個位元組就不用了,那麼j和i的位址就不連續了, 並且會有 3 個位元組的差異。如果沒有位址對齊,則應將其連續分布在堆疊上。
-
從理論上講,任何資料型別都可以儲存在向量中,無論您向其新增什麼型別,它都會返回您與物件。
我們還可以在指定的向量中顯示資料型別,稱為泛型,例如 vectorv = new vector();
之後,當您在 add() 方法中只能傳入 int 或整數型別 get() 時,將自動返回 int 型別。
-
vector 在不使用正規化的情況下,add 方法和 get 方法都是物件型別。
它是一種物件型別,你不能把它新增到 int 中,你可以使用強制轉換來滿足你的需求:
sum += (integer) ;
-
sum += ;為什麼這是錯的?
報告錯誤,因為它是物件
不支援預設的 += 操作,您應該這樣做:
sum += ((integer);為什麼這是錯的?
-
放置在堆疊內; 實際上,它是 tmp 的副本。 如果您沒有寫入複製建構函式的按位副本(這是不安全的),如果您編寫複製建構函式,您將以相同的方式複製它。
-
向量的元素是連續儲存的,只要得到任何元素的指標,就可以使用指標訪問向量中的每個元素,但是如果在向量中插入或刪除元素,這個位址就可能無效。
取消引用迭代器可以獲取對迭代器指向的元素的引用,並且可以使用此引用的 address 運算子來獲取該元素的記憶體位址。
母音音素存在於某個單詞中,簡單地說,如果某個單詞的音標中有乙個聲音是母音,那麼該單詞就有乙個母音音素! 這就是它的意思! 母音字母: a e i o u >>>More