簡體   English   中英

C ++指向向量行為的指針

[英]C++ pointers to vectors behavior

我知道在矢量上使用原始指針並不是最好的方法,因為它很聰明,但是我的問題只是要理解我無法纏住頭緒的問題……如果我創建了一個矢量,然后創建了一個指針對此:

    vector<int> vec = {1,2,3,4,5};
    vector<int> *ptr = &vec;
  1. 為什么我需要使用引用運算符&而數組不需要它? (不是向量動態數組)
  2. 為什么我寫cout<<*ptr<<endl; ,編譯器給出了錯誤,我必須寫cout<<(*ptr)[1]<<endl; cout<< ptr->at(1) ??

通常,如果創建指向數組的指針,該指針指向第一個元素。

您能幫我了解什么是動物載體嗎?

為什么我需要使用引用運算符(&)而數組不需要它呢?(不是向量動態數組)

與數組等效的操作是這樣的:

int array[] = {1,2,3,4,5};
int (*ptr)[5] = &array; // less constrained to just 5 elements with vectors

因此,您仍然需要&運算符;

為什么我寫cout<<*ptr<<endl; ,編譯器給出了錯誤,我必須寫cout<<(*ptr)[1]<<endl; cout<< ptr->at(1) ??

因為向量是對象,並且*運算符沒有重載以返回除向量本身以外的任何有用信息。


您可能想做的是使用std::vector::datastd::vector::data函數,該函數為您提供了指向該Vector使用的基礎數組的指針。

不是向量動態數組)

從概念上講,是明智的實施,不。 向量實例是類型為std::vector <sometype> 如果要獲取矢量實例之類的對象的地址,則需要使用地址運算符aka & 向量與c ++數組不是一類東西。

為什么我寫cout<<*ptr<<endl; ,編譯器給出錯誤

因為std :: vector不支持通過operator <<進行流式傳輸。

編輯:

如果您確實想訪問內部陣列,則可以執行以下操作:

vector <int> v = // whatever
int * ip = &v[0];

要么:

int * ip = v.data();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM