-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)
任何帮助表示赞赏
在这个 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)
并且要访问向量的元素,您应该使用表达式*it或it运算符->,就像it是指针一样。例如( *it ).qty或it->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)