[英]C++ pointers to vectors behavior
我知道在矢量上使用原始指針並不是最好的方法,因為它很聰明,但是我的問題只是要理解我無法纏住頭緒的問題……如果我創建了一個矢量,然后創建了一個指針對此:
vector<int> vec = {1,2,3,4,5};
vector<int> *ptr = &vec;
&
而數組不需要它? (不是向量動態數組) 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::data
的std::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.