我知道在矢量上使用原始指针并不是最好的方法,因为它们很聪明, 但我的问题只是一个可以理解我无法绕过的东西的问题...... 如果我创建一个向量,然后是指向它的指针:
vector<int> vec = {1,2,3,4,5};
vector<int> *ptr = &vec;
&
而阵列不需要它? (不是矢量动态数组)cout<<*ptr<<endl;
,编译器出错,我必须写cout<<(*ptr)[1]<<endl;
或cout<< ptr->at(1)
?? 通常,如果您创建指向数组的指针,指针指向第一个元素。
你能帮我理解什么样的动物载体吗?
答案 0 :(得分:2)
为什么我需要使用引用运算符(&amp;)而不是数组 不需要它吗?(不是动态数组的矢量)
与您所做的相同,使用数组是:
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
函数,它给你一个指向向量使用的底层数组的指针。
答案 1 :(得分:1)
不是矢量动态数组)
概念上是,实施明智,不。矢量实例是std::vector <sometype>
类型的对象。如果要获取像向量实例之类的对象的地址,则需要使用address-of,aka &
,operator。向量不与c ++数组相同。
为什么我写
cout<<*ptr<<endl;
,编译器给出错误
因为std :: vector不支持通过运算符&lt;&lt;
进行流式传输。编辑:
如果你真的想要访问内部数组,你可以这样做:
vector <int> v = // whatever
int * ip = &v[0];
或:
int * ip = v.data();