c++ 尝试查找 vector<struct>.begin()/.end() 时出错

-1 c++ iterator loops for-loop vector

所以在我的项目中有这件事困扰着我,它阻止我在将 struct 作为向量类型时找到 vector.begin() 和 vector.end() 。任何人都可以帮助我吗?

struct product
{
    string name = "";
    int qty = 0, code = 0, cat = 0;
    double price = 0.00;
}

(...)
vector <product> prod;
(...)
for(int i = 0; i != prod.end(); i++) //error here
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏

Vla*_*cow 5

在这个 for 循环中

for(int i = 0; i != prod.end(); i++) 
Run Code Online (Sandbox Code Playgroud)

比较了一个 int 类型的对象和一个类型的对象,std::vector<product>::iterator或者std::vector<product>::const_iterator

没有为这些类型的操作数定义运算符 != 。

看来你的意思是

for ( auto it = prod.begin(); it != prod.end(); ++it) 
Run Code Online (Sandbox Code Playgroud)

或者

for ( auto it = std::begin( prod ); it != std::end( prod ); ++it) 
Run Code Online (Sandbox Code Playgroud)

并且要访问向量的元素,您应该使用表达式*itit运算符->,就像it是指针一样。例如( *it ).qtyit->qty

或者

for ( std::vector<product>::size_type i = 0; i != prod.size(); i++ )
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您可以使用下标运算符,例如prod[i].qty

请注意,循环对空向量没有意义。

另一种方法是使用基于范围的 for 循环,例如

for ( const auto &p : prod )
Run Code Online (Sandbox Code Playgroud)

或者

for ( auto &p : prod )
Run Code Online (Sandbox Code Playgroud)