c++ - 为什么我的代码没有将每个对象都添加到向量中?
问题描述
我正在从一个文件中读取数据,并使用收到的信息来解析数据并将它们存储到它们对应的对象中,然后将它们推回向量中。但是,当代码将信息存储到对象中然后被推回向量中时,向量不保存该值。然后它会跳过向量中的几个位置,并开始正确地将对象添加到文件的末尾。有没有办法确保所有元素都被填充?
这是我的结构:
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 ?
解决方案
当你调用push_back
avector
时,如果它导致向量的大小增加,它会使所有指向向量的指针和引用无效。Avector
将所有对象存储在一个连续的内存块中,因此当它的大小增加时,可能需要分配一个新的内存块,从而导致向量中的所有现有对象都移动到该新位置。
您在 a 中存储指向对象的指针的模式vector
不是一个好的模式,尽管您可以通过从一开始就保留足够的空间来使其工作vector
- 如果您知道它将有多大。vector
否则,您可以使用不具有此属性的集合以外的其他集合。
推荐阅读
- c# - AppServiceConnection 有超时限制吗?
- ms-access - 如何递增编号报告详细信息并在没有记录时设置 0,访问报告
- java - Selenium/Selenide:测试代码重构是否存在 shadowroot
- c# - Unity 在跌落时检测碰撞
- android - Xamarin Forms 更新到 3.1 后,“LinkAssemblies”任务意外失败
- kubernetes - Kubernetes 中的 Ansible AWX RabbitMQ 容器无法使用 nxdomain 从 k8s 获取节点
- c# - Vector3.Slerp() 没有完成它必须做的事情就停止了
- ruby - watir 中的 HTML 块和内联元素文本选择
- r - 使用 lapply 过滤多个数据集
- python - Python numpy.where: TypeError: 只有整数标量数组可以转换为标量索引;在字典列表中