指向数组和向量对象的指针
Pointers to an Array and Vector object
指针如何作用于数组和向量对象
为array_1#include <iostream>
#include <array>
using namespace std;
int main(){
int a[3][4]={0,1,3,3,4,5,6,7,8,9,10,11};
//int (*pi)[4]=a;
for( auto *pi=a; pi!=a+3; ++pi ){
for( auto p=*pi; p!=*pi + 4; ++p){
cout << *p << "n";
}
}
}
为array_2 #include <iostream>
#include <array>
using namespace std;
int main(){
int a[3][4]={0,1,3,3,4,5,6,7,8,9,10,11};
//int (*pi)[4]=a;
for( auto pi=a; pi!=a+3; ++pi ){
for( auto p=*pi; p!=*pi + 4; ++p){
cout << *p << "n";
}
}
}
为vector_1 #include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> a{0,1,3,3,4,5,6,7,8,9,10,11};
for(auto i=a.begin(); i!=a.end(); ++i ){
// we can also use begin(a) and end(a)
cout << *i << "n";
}
}
为vector_2 #include <iostream>
#include <vector>
using namespace std;
int main(){
vector<int> a{0,1,3,3,4,5,6,7,8,9,10,11};
for(auto *i=a.begin(); i!=a.end(); ++i ){
// we can also use begin(a) and end(a)
cout << *i << "n";
}
}
两个代码(对于array_1和array_2)给出相同的输出,即(0-11)
您可以看到,这两段代码的第一个for循环是不同的。在中,对于vector_1,据我所知,我认为,我正在创建一个指向向量开头的指针i
,然后对其解引用以获取相应位置的值。现在我的疑问是,为什么在For array_1和For array_2当我在第二个For循环中使用*pi
时,而不是得到解引用(就像在向量的情况下),它正在获取我的迭代值?为什么For vector_2与For vector_1的工作方式不同?
对于向量,size()
和begin()/end()
函数的返回类型是什么?因为当我使用for(decltype(a.size()) I =0;结束我! = ();++i),它给了我一个类型转换错误。
对于array_1、array_2和vector_1的代码给出相同的输出(0-10)。给出错误的是vector_2的。谢谢。
在vector_1的情况下,你不是创建一个指针,而是创建一个迭代器 -在大多数基本用例中,比如打印向量结果,迭代器像指针一样工作和使用,但它不一样,不应该像处理指针一样处理。在vector_2的情况下,你做了一些讨厌的事情,因为这是auto关键字的工作,以确定变量是否是指针。
最后一个例子导致了一个错误,因为你试图创建一个指向迭代器的指针,而begin()函数返回的类型是一个迭代器(一个值),而不是迭代器对象的地址。 如果你想知道像size()、begin()等函数的返回类型,你可以参考几个大型的c++参考网站之一,例如:
- 对象指针在c++中是如何工作的
- C++ 对象指针数组的复制构造函数
- 在对象指针上调用 Delete 是否会递归删除其动态分配的成员
- 什么更好?返回对象指针列表?或返回指向对象列表的指针?
- 正确初始化和销毁对象指针的C++数组?
- 如何深度复制链表对象指针
- 对象指针 c++ 的全局向量错误
- 如何将 c++ 类包装到 python 中,以便我可以使用 pybind11 访问其成员的公共方法(成员是一个对象指针)
- 静态对象指针
- 正在将对象指针数组初始化为NULL
- 如何使用条件表达式返回对象指针?
- std::flush可以用于将对象指针转换为其封闭数组指针吗
- 使用C对象指针构建PyObject*
- 如何在使用对象指针时访问成员函数
- 静态强制转换允许转换对象指针,但不允许转换整数
- C++ abort() 在函数内的抽象类对象指针调用上
- 指向函数的对象指针
- 访问指向对象指针向量的指针的第一个元素?
- 如何将对象/指针正确存储到 Qlist 中
- 对象指针打印结果以相反的顺序进行