向量中的元素是否連續儲存在記憶體中 如果它們是字串元素怎麼辦? 20

發布 科技 2024-03-03
12個回答
  1. 匿名使用者2024-02-06

    向量中的元素確實連續儲存在記憶體中。 vector 的實現由動態陣列組成。 當空間不足時,使用類似於 C 的 realloc 函式。

    重新分配空間。 由於向量中的元素是連續儲存的,因此向量支援在恆定時間內隨機訪問元素。 向量中的迭代器屬於隨機訪問迭代器

    如果向量儲存字串型別。 情況是一樣的。 需要注意的是,字串型別不是簡單的 char 陣列。

    字串中的陣列也是動態分配的。 為了方便起見,您可以理解(不完全)當向量儲存字串型別時,陣列中實際上有很多 char* 指標,並且每個指標都指向字串字元的內容。 可以給你乙個簡單的圖表。

    vector |

    v v v v

    s1 s2 s3 s4

    至於你說的投射到記憶中是什麼意思,我不太明白你想說什麼,所以我不知道該怎麼說。

  2. 匿名使用者2024-02-05

    這不合適......朋友。強制容器複製是沒有意義的,你仍然無法獲得連續資料。 而且,你認為字串空間是連續的嗎?

    字串的內容也是動態分配的,不僅沒有意義,而且這樣做是錯誤的。

  3. 匿名使用者2024-02-04

    不,如果資料很多,就會分成幾塊記憶體。

    而字串是乙個類,不能用作記憶體副本。

  4. 匿名使用者2024-02-03

    是的,完全沒有問題。 程式的主要問題是:

    1.如果模板內部有模板,則兩者必須“分開,否則會誤認為移位運算子和錯誤”。 這是乙個容易犯的錯誤。

    所有相似向量> n,d; 語句統一改為向量<向量>n,d;

    2.在類外部定義 send 函式時,不會新增範圍識別符號。

    您已經清空了 m,並且無法輸入空模板。

    如果向量儲存字串型別。 情況是一樣的。 需要注意的是,字串型別不是簡單的 char 陣列。 字串中的陣列也是動態分配的。

    我的回答可供您參考,謝謝。

  5. 匿名使用者2024-02-02

    你只需分配乙個值。 這是對位址的引用。 真正的內容分配是;

  6. 匿名使用者2024-02-01

    vectorsp;

    string str;

    vector 使用 string* 定義 sp; 您要儲存的資料型別為 string ; 型別不匹配(將 vectorsp 更改為 vectorsp)。

    在 C++ 中,std::string 通常採用字串而不是字串* 的形式

  7. 匿名使用者2024-01-31

    區域性變數分配在堆疊上,函式呼叫前的堆疊指標應與函式返回後的堆疊指標相同,否則會出現錯誤。

    如何分配可以自己編寫乙個小測試程式。

    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 個位元組的差異。如果沒有位址對齊,則應將其連續分布在堆疊上。

  8. 匿名使用者2024-01-30

    從理論上講,任何資料型別都可以儲存在向量中,無論您向其新增什麼型別,它都會返回您與物件。

    我們還可以在指定的向量中顯示資料型別,稱為泛型,例如 vectorv = new vector();

    之後,當您在 add() 方法中只能傳入 int 或整數型別 get() 時,將自動返回 int 型別。

  9. 匿名使用者2024-01-29

    vector 在不使用正規化的情況下,add 方法和 get 方法都是物件型別。

    它是一種物件型別,你不能把它新增到 int 中,你可以使用強制轉換來滿足你的需求:

    sum += (integer) ;

  10. 匿名使用者2024-01-28

    sum += ;為什麼這是錯的?

    報告錯誤,因為它是物件

    不支援預設的 += 操作,您應該這樣做:

    sum += ((integer);為什麼這是錯的?

  11. 匿名使用者2024-01-27

    放置在堆疊內; 實際上,它是 tmp 的副本。 如果您沒有寫入複製建構函式的按位副本(這是不安全的),如果您編寫複製建構函式,您將以相同的方式複製它。

  12. 匿名使用者2024-01-26

    向量的元素是連續儲存的,只要得到任何元素的指標,就可以使用指標訪問向量中的每個元素,但是如果在向量中插入或刪除元素,這個位址就可能無效。

    取消引用迭代器可以獲取對迭代器指向的元素的引用,並且可以使用此引用的 address 運算子來獲取該元素的記憶體位址。

相關回答
11個回答2024-03-03

在C++中,vector被用作容器,其功能是儲存struct型別的變數。 以下是向量的使用方法: >>>More

8個回答2024-03-03

母音音素存在於某個單詞中,簡單地說,如果某個單詞的音標中有乙個聲音是母音,那麼該單詞就有乙個母音音素! 這就是它的意思! 母音字母: a e i o u >>>More

9個回答2024-03-03

年中節是農曆七月初十五,今年是8月12日。 >>>More

9個回答2024-03-03

這個節日也被稱為“鬼節”,據說這一天是地獄開啟的日子,已故的祖先可以回家團聚,所以也是乙個鬼節。

10個回答2024-03-03

快到七月半的年中節了,作為我國的傳統節日,它以奉琴和普渡為主題,是人們把祖先放在相思病上的節日,在民間也被稱為“鬼節”。