【问题标题】:"No match for operator+"“运算符+不匹配”
【发布时间】:2013-09-29 10:15:19
【问题描述】:

我是初学者,2 个月后重新开始编程。几乎忘记了一切。如果我想要的字符在前半部分找到,我刚刚尝试编译的代码会使用迭代器消除向量的后半部分。

代码如下:

#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
    vector<string> v;
    string s("hello world");
    char sought = 'e';
    v.push_back(s);
    auto mid = (v.begin() + v.end())/2;
    if (sought<*mid)
    {
        end = mid;
    }
    cout<<*v;

}

请告诉我我的错误是什么。

另外,可以忘记编程吗?此外,一旦精通,这个概念会永远保留,还是需要不断练习和阅读?

【问题讨论】:

  • 您的代码无效,end/it 来自哪里?
  • 你肯定不想将 Begin 添加到 End。
  • 另外,您永远不会声明 itend。在询问算法之前纠正你的基本错误。
  • 为什么不呢?我意识到了这一点,但我可以解释一下吗?我错过了一些东西。很明显。
  • 请显示真实代码,cout&lt;&lt;*v; 这无效,sought&lt;*mid 也不会编译。

标签: c++ c++11 vector iterator operators


【解决方案1】:

首先,您不能将迭代器添加在一起(在v.begin() + v.end() 中)。相反,使用

auto mid = v.begin() + v.size() / 2;

其次,endit 未声明。

最后,您不能通过分配给“end”来擦除矢量的一部分。您需要使用不同的方法(留作练习)。

【讨论】:

  • 成功了!为什么 v.size() 有效,而 v.end() 无效?在我正在阅读的书中给出了相同的方式,但没有解释。由于我的直觉错误,我显然错过了一些愚蠢的事情。
  • @user2530836:想一想:v.begin() + v.end()的类型和值应该是什么?
  • 我很惊讶这有效,因为 sought 是 char 而 *mid 是 std::string。
  • @NPE,值将是 11,因为这是存在的字符数(以字符串的形式),对吧? v.begin() + v.size() 不会给出相同的值吗?
  • 我意识到我的错误。 v.end() 计算到最后一个元素之后的元素。对吗?
猜你喜欢
  • 2012-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多