指向数组和矢量对象的指针

时间:2014-07-05 18:10:39

标签: c++ arrays pointers c++11 vector

指针如何用于数组和矢量对象

对于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循环存在差异。 在 For vector_1 中,据我所知,我认为,我正在向量的开头创建指针i,然后取消引用它以获取相应位置的值。现在我的疑问是,当我在第二个for循环中使用*pi时,如何使用 For array_1 For array_2 ,而不是取消引用(如矢量的情况),它是取给我的迭代值? 为什么对于vector_2 的工作方式与对于vector_1 的工作方式不同?

向量的size()begin()/end()函数的返回类型是什么? 因为当我使用 for(decltype(a.size())i = 0; i!= end(); ++ i)时,它会给我一个类型转换错误。

array_1的代码,array_2和vector_1的代码给出相同的输出(0-10)。导致错误的是 for vector_2 。 感谢。

1 个答案:

答案 0 :(得分:0)

如果 vector_1 你没有创建一个指针,而是一个迭代器 - 在大多数基本用例中,比如打印矢量结果,迭代器可以正常工作,就像一个指针,但它不相同,不应该像处理指针一样处理。如果是 vector_2 ,你会做一些讨厌的事情,因为这是 auto 关键字的工作,以确定变量是否是指针。

最后一个示例导致错误,因为您正在尝试创建指向迭代器的指针,而 begin()函数返回的类型是迭代器(值),而不是迭代器对象的地址

如果您想知道 size() begin()等函数的返回类型,您可以随时参考几个大型C ++参考之一网站,例如:

www.cplusplus.com

www.cppreference.com