개체의 벡터와 그 개체에 대한 다른 포인터 벡터를 만들고 싶다고합니다 (동적 메모리를 사용할 수 없음). 내가하는 일은 다음 예제에 나와 있습니다. 정적으로 할당 된 객체에 대한 포인터를 벡터에 저장하는 방법은 무엇입니까?
#include <iostream>
#include <vector>
using namespace std;
class Foo {
public:
int bar;
Foo(int x) : bar(x) {
}
};
int main() {
vector<Foo> foos;
vector<Foo*> pFoos;
for (int i = 0; i < 10; i++) {
Foo foo(i);
foos.push_back(foo);
pFoos.push_back(&foos.back());
}
for (int i = 0; i < 10; i++) {
cout << foos[i].bar << endl;
cout << pFoos[i]->bar << endl;
}
}
나는이 일을해야한다고 생각하기 때문에
foos
저장 나는 (원래
foo
가 정의되기 때문에, 그래서 그에 대한 참조를 저장 안) 사본에 대한 참조를 저장 한 다음 오브젝트의 복사 및 . 그러나 이것이 내가 얻은 것입니다.
0
36741184
1
0
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
첫 번째 숫자는 pFoos
입니다. 또한 매번 큰 숫자가 바뀝니다. 이 정의되지 않은 동작을 일으키는 어떤 것도 표시되지 않습니다. 누군가 내가 뭘 잘못하고 있다고 말할 수 있습니까?
하지만'foo'는 정적이 아니고 로컬 저장소입니다 ... – rodrigo
@rodrigo 벡터가 그 복사본을 만들 것이라고 생각 했습니까? – gsingh2011
그리고 그 코멘트에 대한 내 참조는 다음과 같습니다 : http://www.cplusplus.com/reference/stl/vector/push_back/ – gsingh2011