为啥我的代码没有将每个对象都添加到向量中?

Posted

技术标签:

【中文标题】为啥我的代码没有将每个对象都添加到向量中?【英文标题】:Why does my code not add every object into the vector?为什么我的代码没有将每个对象都添加到向量中? 【发布时间】:2019-04-08 04:23:13 【问题描述】:

我正在从一个文件中读取数据,并且我想根据收到的信息解析数据并将它们存储到相应的对象中,然后再将它们推回到向量中。但是,当代码将信息存储到对象中然后被推回向量中时,向量不保存该值。然后它会跳过向量中的几个位置,并开始正确地将对象添加到文件的末尾。有没有办法确保所有元素都被填充?

这是我的结构:

struct Address 
        string streetAddress; 
        string city; 
        string state; 
        string zipCode; 
;

struct Customer  
        string customerNum; 
        string customerName; 
        double lineOfCredit; 
        Address * corperateAddress; 
;

您可以看到 Customer 的成员是一个指向 Address 结构的指针。

下面是用于下面代码的函数和一些变量:

void readData(vector<Customer>&addCust, vector<Address>&cAdd, vector<Product>&pAdd)

Address street;
Customer add;
Product product;

vector<string> custInfo;
vector<string> custAddress;
vector<string> custProduct;
ifstream file,stock;

这是发生错误的地方,我相信它在 if-else 语句中:

        custAddress=parse(location,',');                   //Parse the location to go into Address struct
        check = linearSearchAddress(cAdd,custAddress[0]);  //Checks Address vector to see if there is the same location

        street.streetAddress=custAddress[0];               //Adds 1st parse to the Struct member 
        street.city=custAddress[1];                        //Adds 2nd parse to the Struct member 
        street.state=custAddress[2];                       //Adds 3rd parse to the Struct member 
        street.zipCode=custAddress[3];                     //Adds 4th parse to the Struct member

        if(check==-1)                                     //If address is not found then add it to the Address vector 
            cAdd.push_back(street);                        //Adding objects into the Address vector
            add.corperateAddress = &cAdd.back();
         else 
            add.corperateAddress=&cAdd[check];             //Adds location that is within vector already 
        
         addCust.push_back(add);                           //Adding objects into Customer vector
     
        cout<<addCust[0].corperateAddress->streetAddress<<endl;  // Element is empty some how ?

【问题讨论】:

【参考方案1】:

当您在vector 上调用push_back 时,如果它导致向量的大小增加,它会使所有指向向量的指针和引用无效。 vector 将所有对象存储在一个连续的内存块中,因此当它的大小增加时,可能需要分配一个新的内存块,从而导致向量中的所有现有对象都移动到该新位置。

您在vector 中存储指向对象的指针的模式不是一个好的模式,尽管您可以通过从一开始就在vector 中保留足够的空间来使其工作——如果您知道它将有多大。否则,您可以使用不具有此属性的 vector 以外的其他集合。

【讨论】:

Some reading to help select a different container,如果你选择走那条路。

以上是关于为啥我的代码没有将每个对象都添加到向量中?的主要内容,如果未能解决你的问题,请参考以下文章

对象如何将自己添加到对象类中的向量中?

尝试使用自动布局将 UIButton 添加到我的视图中,但它没有出现。为啥? [关闭]

为啥我的角色没有使用此代码移动?

为啥每当我尝试将图像添加到我的 django 项目时都会出错?

为啥服务器没有检测到我的 python 项目中的更改源代码?

为啥添加 CSS 后我的 PHP 代码中没有显示错误消息?