尝试查找 vector<struct>.begin()/.end() 时出现 C++ 错误
c++ bugs out when trying to find vector<struct>.begin()/.end()
所以在我的项目中有这个问题困扰着我,它阻止我在将结构作为向量类型时找到 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
感谢任何帮助
在这个for循环中
for(int i = 0; i != prod.end(); i++)
比较了一个 int 类型的对象和一个 std::vector<product>::iterator
或 std::vector<product>::const_iterator
类型的对象
没有为这些类型的操作数定义运算符 !=。
你的意思好像是
for ( auto it = prod.begin(); it != prod.end(); ++it)
或
for ( auto it = std::begin( prod ); it != std::end( prod ); ++it)
并且要访问向量的元素,您应该使用表达式 *it
或 it
和运算符 ->
,就像 it
是一个指针一样。例如 ( *it ).qty
或 it->qty
.
或
for ( std::vector<product>::size_type i = 0; i != prod.size(); i++ )
在这种情况下,您可以使用下标运算符,例如 prod[i].qty
。
请注意,循环对于空向量没有意义。
另一种方法是使用基于范围的 for 循环,例如
for ( const auto &p : prod )
或
for ( auto &p : prod )
所以在我的项目中有这个问题困扰着我,它阻止我在将结构作为向量类型时找到 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
感谢任何帮助
在这个for循环中
for(int i = 0; i != prod.end(); i++)
比较了一个 int 类型的对象和一个 std::vector<product>::iterator
或 std::vector<product>::const_iterator
没有为这些类型的操作数定义运算符 !=。
你的意思好像是
for ( auto it = prod.begin(); it != prod.end(); ++it)
或
for ( auto it = std::begin( prod ); it != std::end( prod ); ++it)
并且要访问向量的元素,您应该使用表达式 *it
或 it
和运算符 ->
,就像 it
是一个指针一样。例如 ( *it ).qty
或 it->qty
.
或
for ( std::vector<product>::size_type i = 0; i != prod.size(); i++ )
在这种情况下,您可以使用下标运算符,例如 prod[i].qty
。
请注意,循环对于空向量没有意义。
另一种方法是使用基于范围的 for 循环,例如
for ( const auto &p : prod )
或
for ( auto &p : prod )