【问题标题】:c++ bugs out when trying to find vector<struct>.begin()/.end()尝试查找 vector<struct>.begin()/.end() 时出现 c++ 错误
【发布时间】:2021-07-01 13:05:20
【问题描述】:

所以在我的项目中有一个问题困扰着我,它阻止我在将 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

感谢任何帮助

【问题讨论】:

  • 这应该是一个错误。迭代器和索引是不同的东西。您可能需要一个基于范围的 for 循环而不是任何一个。 for (auto&amp; prd : prod) { // do something with prd}

标签: c++ loops for-loop vector iterator


【解决方案1】:

在这个for循环中

for(int i = 0; i != prod.end(); i++) 

比较一个int类型的对象和一个std::vector&lt;product&gt;::iteratorstd::vector&lt;product&gt;::const_iterator类型的对象

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

你的意思好像是这样的

for ( auto it = prod.begin(); it != prod.end(); ++it) 

for ( auto it = std::begin( prod ); it != std::end( prod ); ++it) 

要访问向量的元素,您应该使用表达式*itit 和运算符-&gt;,就好像it 是一个指针一样。例如( *it ).qtyit-&gt;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 )

【讨论】:

  • 非常感谢! “for (std::vector::size_type i = 0; i != prod.size(); i++)” 解决方案对我来说效果很好
猜你喜欢
  • 1970-01-01
  • 2023-02-09
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-28
  • 2019-04-21
相关资源
最近更新 更多