为啥我的代码没有将每个对象都添加到向量中?
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 项目时都会出错?