2015-07-02 13 views
0

我編寫了以下程序以初始化vectorPerson。但Person對象的id不會更改。這真讓我困惑。有人可以給我一個解釋嗎?如何使用C++中的迭代器更改向量中每個elmement的值

#include <iostream> 
#include <vector> 
#include <string> 
#include "Person.h" 

using namespace std; 
int main() 
{ 
    vector<Person>* pv = new vector<Person>(5,Person(0)); 
    int i = 0; 
    for(Person person : *pv) 
    { 
     person.id = i++; 
    } 

    for(Person person : *pv) 
    { 
     cout<< person.id << endl; 
    } 

    return 0; 
} 

person.h這樣

#include <string> 

class Person 
{ 
    public: 
    int id; 
    std::string name; 
    Person(int d); 
}; 
+1

我認爲你需要迭代for(Person&person:* pv)?我認爲你正在改變副本的ID。如果通過引用進行迭代,則應更改向量中對象的ID。 – twsaef

+0

是的!你是對的。非常感謝:) – feng823

+0

好的,我將添加它作爲答案。 – twsaef

回答

1

在這個循環中,你需要通過引用遍歷或者你會在載體中,而不是實際的人在被分配到的人的副本ID矢量。

for(Person& person : *pv) 
{ 
    person.id = i++; 
}