【发布时间】:2019-05-15 02:12:54
【问题描述】:
所以我试图理解 std:: 搜索。首先我创建了一个类的数组,然后复制到一个向量中。
现在我正在尝试检查我的向量的内容是否出现在我的数组中(我已经修改了一个向量值,所以它们不会相同)。
就像向量是空的,我也无法找到_brandName!
这是我最好的尝试:
#include <algorithm>
#include <string>
#include <iostream>
#include <vector>
#include <iterator>
class Car{
public:
Car(){};
Car(std::string brand, double speed){_brandName = brand; _speed = speed};
~Car(){};
bool operator==(const Car& rhs){return _brandName == _brandName;}
std::string GetBrand(){return _brandName;}
private:
std::string _brandName;
double _speed;
};
int main(){
Car carArray[4];
carArray[0] = Car("BMW", 280);
carArray[1] = Car("FORD", 300);
carArray[2] = Car("FORD", 380);
carArray[3] = Car("AUDI", 380);
auto arraySize = sizeof(carArray) / sizeof(carArray[0]);
std::vector<Car> carVector(carArray, carArray + arraySize);
carVector[0] = Car("Ferrari", 400);
std::cout << carVector[0].GetBrand();
std::vector<Car>::iterator it;
it = std::search(carVector.begin(), carVector.end(), std::begin(carArray), std::end(carArray));
std::cout << it->GetBrand();
return 0;
}
我必须将 -1 添加到向量末尾,否则会出现错误: 在抛出 'std::logic_error' 的实例后调用终止
what(): basic_string::_M_construct null 无效
我认为错误是因为我试图调用值为 NULL 的 std::string 构造函数,但我不明白为什么会这样说。
我也不知道我对 std::search 的实现是否正确,正确的方法是什么?
【问题讨论】:
-
为什么你的类在构造函数的第二个参数中使用双精度参数,但有一个
std::string成员?_value(value)会导致坏事。 -
您需要创建一个minimal reproducible example。你已经解决了你的问题,所以它是最小的,但是你需要创建一个小的可以编译的代码 sn-p。然后,我们只需将您的代码复制粘贴到我们的编译器中,然后自己查看。
-
写错了,应该是双份的。
-
搁置 NathanOliver 所说的话,这确实是导致编译时错误的原因(尽管编译器在给出错误时应该将您定向到该行);为什么要填充一个数组,然后从该数组中创建一个向量,而不是直接从一个向量开始?
-
您的代码与您的问题描述不匹配。哪里有两个元素被修改?您当前的代码工作正常,因为两个范围是相同的。
标签: c++ algorithm search standard-library