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
'programing' 카테고리의 다른 글
FluentMigrator를 사용하여 nvarchar (MAX) 열을 만들 수 있습니까? (0) | 2021.01.18 |
---|---|
이전 Android 프로젝트를 Eclipse로 가져올 때 AndroidManifest.xml 누락 (0) | 2021.01.18 |
webSocketServer node.js 클라이언트를 차별화하는 방법 (0) | 2021.01.18 |
HTML로 렌더링 내부의 콧수염 템플릿 문자열 (0) | 2021.01.18 |
WebApi 도움말 페이지 설명 (0) | 2021.01.18 |