문제

내 변수를 벡터에서 어떻게 꺼내겠습니까?

바이너리 삽입 연산자 또는 동등한 연산자를 사용할 수 없습니다.

앞서 나는 a를 선언했다 vector<someStruct> *vObj 그리고 그것을 할당 한 다음 반환했습니다 vObj이 기능에서 그것을 불렀습니다.

vector<sameStruct> firstFunc();

for (unsigned int x = 0; x < v->size(); x++)
{
   v[x];
}

디버그 할 때 v[x] 이제 첨자/인덱스없이 이전과 마찬가지로 원래 벡터의 전체 내용이 있습니다.

그러나 나는 그 이상으로 발전하기 위해 아무것도하지 않았다고 생각합니다.

벡터 안에 약 4 개의 변수가 있습니다. 디버깅 할 때 필요한 정보가 있지만 얻을 수는 없습니다.

도움이 되었습니까?

해결책

쓰여진 것처럼 V는 스트러크 벡터에 대한 포인터입니다.

당신이 v로 직접 색인하면 당신이하는 모든 일은 포인터 산술입니다. v [x]는 위치 X에서 스트러크의 벡터입니다 (V가 포인터 끝에서 단일 물체 인 경우 v> 0의 v [x]는 단지 쓰레기입니다). 이것은 [x]를 V에 의해 가리키는 벡터가 아니라 포인터 v 자체에 적용하기 때문입니다.

포인터를 피한 다음 다음과 같은 것을 사용하여 벡터에 인덱싱해야합니다.

(*v)[x];

이 시점에서 벡터의 XTH 위치에있는 객체에 대한 참조가 있습니다.

(*v)[x].variable;

또는

(*v)[x].memberfunction(parameters);

벡터를 해석하지 않으려면 벡터 내의 요소에 액세스 할 수 있다면 다음과 같은 것을 시도 할 수 있습니다.

v->at(x);
v->at(x).variable;
v->at(x).memberfunction;

이런 식으로 당신은 당신이 호출 할 때와 정확히 같은 방식으로 객체의 멤버 함수에 액세스하고 있습니다.

v->size();

이것이 도움이되기를 바랍니다.

다른 팁

] 연산자를 사용하여 요소에 액세스하려면 객체에 대한 포인터가 아니라 객체에서해야합니다.

노력하다;

(*vec)[x];

예를 들어

for (int i = 0; i < vec->size(); i++)
{
  printf("Value at %d is %d\n", i, (*vec)[i]);
}

포인터에서 함수를 호출 할 때 일반적으로 사용합니다. -> 대신 연산자 . 연산자이지만 쉽게 할 수 있습니다 (*vec) .some_func (); 대신에.

], -, ++ 등과 같은 연산자는 객체와 포인터 모두에서 작동 할 수 있습니다. 객체를 사용하면 기능 호출 역할을하지만 포인터에서는 주소에서 수학 연산 역할을합니다.

예를 들어;

pointer[nth];
*(pointer + nth);

정확히 같은 효과를 가져옵니다. 포인터의 시작부터 N 번째 객체를 반환합니다. ( *의 위치 * 두 번째 예에서는 ~ 후에 오프셋이 적용됩니다.

다른 두 가지 팁;

또한 벡터를 포인터가 아닌 기준으로 전달하여 이와 같은 연도를 피할 수 있습니다. 항상 적합한 옵션은 아니지만 클리너 코드로 이어집니다.

void my_func(std::vector<int>& vector)
{
  // vector can then be used as a regular variable
}

특정 유형의 벡터를 기능에 많이 전달하려면 명확성과 타이핑을 저장하기 위해 TypEdef를 사용할 수 있습니다.

typedef std::vector<int> IntVector;

void my_func(IntVector& vector)
{
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top