指向vector的指针

我有一个向量的指针。 现在,我如何通过指针读取vector的内容? 我知道这是一个基本的问题,但我无法find相同的答案(C ++)

有很多解决scheme,这里有一些我想出来的:

int main(int nArgs, char ** vArgs) { vector<int> *v = new vector<int>(10); v->at(2); //Retrieve using pointer to member v->operator[](2); //Retrieve using pointer to operator member v->size(); //Retrieve size vector<int> &vr = *v; //Create a reference vr[2]; //Normal access through reference delete &vr; //Delete the reference. You could do the same with //a pointer (but not both!) } 

像访问其他任何指针值一样访问它:

 std::vector<int>* v = new std::vector<int>(); v->push_back(0); v->push_back(12); v->push_back(1); int twelve = v->at(1); int one = (*v)[2]; // iterate it for(std::vector<int>::const_iterator cit = v->begin(), e = v->end; cit != e; ++cit) { int value = *cit; } // or, more perversely for(int x = 0; x < v->size(); ++x) { int value = (*v)[x]; } // Or -- with C++ 11 support for(auto i : *v) { int value = i; } 
 vector<int> v; v.push_back(906); vector<int> * p = &v; cout << (*p)[0] << endl; 

你有一个指向vector的指针,因为这是你如何编码它? 您可能需要重新考虑这一点,并使用(可能是const)引用。 例如:

 #include <iostream> #include <vector> using namespace std; void foo(vector<int>* a) { cout << a->at(0) << a->at(1) << a->at(2) << endl; // expected result is "123" } int main() { vector<int> a; a.push_back(1); a.push_back(2); a.push_back(3); foo(&a); } 

虽然这是一个有效的程序,但一般的C ++风格是通过引用而不是指针来传递向量。 这将是一样有效的,但是你不必处理可能的空指针和内存分配/清理等等。如果你不打算修改向量,那么使用一个const引用,并且如果一个非const引用if你确实需要修改。

以下是上述程序的参考版本:

 #include <iostream> #include <vector> using namespace std; void foo(const vector<int>& a) { cout << a[0] << a[1] << a[2] << endl; // expected result is "123" } int main() { vector<int> a; a.push_back(1); a.push_back(2); a.push_back(3); foo(a); } 

正如你所看到的,a中包含的所有信息都将被传递给函数foo,但是它不会复制一个全新的值,因为它是通过引用传递的。 因此,它与传递指针一样高效,您可以将其用作正常值,而不必知道如何将其用作指针或者不得不将其解引用。

你可以直接访问迭代器方法:

 std::vector<int> *intVec; std::vector<int>::iterator it; for( it = intVec->begin(); it != intVec->end(); ++it ) { } 

如果你想要数组访问操作符,你必须去引用指针。 例如:

 std::vector<int> *intVec; int val = (*intVec)[0]; 

有很多解决scheme。 例如你可以使用at()方法。

*我认为你找一个相当于[]操作符。

使用它作为数组最简单的方法是使用vector::data()成员。