So lets say we have a vector v and I pass this to a function f
void f(vector<int> &v) {
cout<<&v;
}
int main() {
vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
cout<<&v[0]<<"\n"<<&v<<"\n";
f(v);
}
For this I get the outputs as:
0x55c757b81300
0x7ffded6b8c70
0x7ffded6b8c70
We can see that &v
and &v[0]
have different address. So is va pointer that points to the start of the vector? If so, why can't I access *v
? Is there a mistake I'm making?
Thanks
Is vector in c++ a pointer?
No. std::vector
is not a pointer. It is a class.
So is va pointer that points to the start of the vector?
No, but v
(an instance of the vector class) does happen to contain a pointer to the start of the array.
why can't I access
*v
?
Because there is no overload for the unary operator*
for the class std::vector
.
The std::vector
structure may contain additional data, such as the length. The contiguous elements are stored in a separate location and that location changes as the array is resized. &v
should remain the same so long as v
isn't moved, but &v[0]
can be invalidated for a number of reasons.
Imagine, in very rough terms, it's:
struct vector {
size_t size;
T* elements;
};
The operator[]
implementation takes over when you employ &v[0]
.
It's not a pointer, and it behaves very differently from new[]
.
std::vector
is a sequence container that encapsulates dynamic size arrays. So definately, it is not a pointer.
As @tadman said, v
(an instance of the vector class) does happen to contain a pointer to the start of the array.
You cannot access *v
because there is no overload for the unary operator* for the class std::vector
.
No the vector in c++ is not a pointer. The vector is a class in c++
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.