구조체에 대한 포인터 배열을 저장하는 벡터를 선언하고 싶습니다. 내 코드는 다음과 같습니다 : -
도와주세요.구조체에 대한 포인터 배열의 벡터
#include <iostream>
#include <vector>
#define in(x) scanf("%lld",&x)
#define out(x) printf("%lld",x)
#define ll long long
struct node {
ll from;
ll to;
ll rank;
};
int main(){
ll n,e;
in(n),in(e);
vector <node> edge;
for (int i = 0; i < e; ++i)
{
ll a,b;
in(a),in(b);
node val;
val.from=a;
val.to=b;
val.rank=i+1;
edge.push_back(val);
}
vector <node> **vec;
vec= new vector <node> *[n];
vector <node>::iterator it;
for (it = edge.begin(); it!= edge.end(); ++it)
{
int a=(*it).from;
int b=(*it).to;
vec[a-1].push_back(it);
vec[b-1].push_back(it);
}
return 0;
}
이렇게하면 오류가 발생합니다. 다른 방법이 있다면 알려주십시오. 미리 감사드립니다. 오류는 다음과 같습니다
In function ‘int main()’: tourists.cpp:60:12: error: request for member ‘push_back’ in ‘*(vec + (((sizetype)(((long unsigned int)a) * 8ul)) + 18446744073709551608u))’, which is of pointer type ‘std::vector<node>*’ (maybe you meant to use ‘->’ ?) vec[a-1].push_back(it); ^
편집 : 나는 내 실수 있어요. 나는 벡터를 과도하게 사용하고 잘못 포인터를 조작했다. 내가 (솔루션)을 필요로 무엇
는 - 실제로 포럼에 물어 무엇
vector <int*> *vec;
vec = new vector <int*> [2];
int a=3;
vec[0].push_back(&a);
for (int i = 0; i < 2; ++i)
{
vector <int*> :: iterator it;
for(it=vec[i].begin();it!=vec[i].end();it++)
cout<<" "<<*(*it);
}
: - 열세에
vector <int> **vec;
vec = new vector <int> *[2];
int a=3;
vec[0].push_back(&a);
// vec[1].push_back(&a);
for (int i = 0; i < 2; ++i)
{
vector <int>* :: iterator it;
for(it=vec[i].begin();it!=vec[i].end();it++)
cout<<" "<<*(*it);
}
나는 매우 죄송합니다, 내 처음 그래서 더 명확 않네했다 묻는 법. 모두에게 다시 한 번 감사드립니다.
미안 해요, 제가 그것을 편집했습니다, 제발 도와주세요. @WhiZTiM –
'벡터 ** vec' ('node's의 벡터 배열) 대신'vector vec' ('node **'의 벡터)를 사용 하시겠습니까? –
CompuChip
무엇이 잘못 되었습니까?'vec [a-1]'은'std :: vector *'유형이지만'std :: vector '유형으로 취급하고 있습니다. '. 만약 당신이 올바르게 처리했다하더라도, vec [a-1]에 할당 된 메모리는없고,'vec [a-1]'은'std :: vector :: iterator'가 아닌'node's를 저장합니다. –