programing

C ++에서 벡터에 대한 포인터에서 벡터의 내용에 액세스하는 방법은 무엇입니까?

projobs 2021. 1. 18. 07:31
반응형

C ++에서 벡터에 대한 포인터에서 벡터의 내용에 액세스하는 방법은 무엇입니까?


벡터에 대한 포인터가 있습니다. 이제 포인터를 통해 벡터의 내용을 어떻게 읽을 수 있습니까?


많은 솔루션이 있으며 여기에 몇 가지가 있습니다.

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;
}

벡터를 코딩 한 방식이기 때문에 벡터에 대한 포인터가 있습니까? 이것을 재고하고 (아마도 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 참조를 사용하고, 다음 경우에는 non-const 참조를 사용하십시오. 수정이 필요합니다.

Here's the references version of the above program:

#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);
}

As you can see, all of the information contained within a will be passed to the function foo, but it will not copy an entirely new value, since it is being passed by reference. It is therefore just as efficient as passing by pointer, and you can use it as a normal value rather than having to figure out how to use it as a pointer or having to dereference it.


vector<int> v;
v.push_back(906);
vector<int> * p = &v;
cout << (*p)[0] << endl;

You can access the iterator methods directly:

std::vector<int> *intVec;
std::vector<int>::iterator it;

for( it = intVec->begin(); it != intVec->end(); ++it )
{
}

If you want the array-access operator, you'd have to de-reference the pointer. For example:

std::vector<int> *intVec;

int val = (*intVec)[0];

There are a lot of solutions. For example you can use at() method.

*I assumed that you a looking for equivalent to [] operator.


The easiest way use it as array is use vector::data() member.

ReferenceURL : https://stackoverflow.com/questions/6946217/how-to-access-the-contents-of-a-vector-from-a-pointer-to-the-vector-in-c

반응형