C++ &引用;运算符+不匹配&引用;

C++ &引用;运算符+不匹配&引用;,c++,c++11,vector,iterator,operators,C++,C++11,Vector,Iterator,Operators,我是一个初学者,两个月后就开始编程了。几乎忘记了一切。我刚才试图编译的代码在迭代器中消除了向量的后半部分,如果我想要的字符是在前半部分找到的 代码如下: #include<iostream> #include<string> #include<vector> using namespace std; int main() { vector<string> v; string s("hello world"); char so

我是一个初学者,两个月后就开始编程了。几乎忘记了一切。我刚才试图编译的代码在迭代器中消除了向量的后半部分,如果我想要的字符是在前半部分找到的

代码如下:

#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;

}
#包括
#包括
#包括
使用名称空间std;
int main()
{
向量v;
字符串s(“你好世界”);
char='e';
v、 推回;
自动中间=(v.begin()+v.end())/2;

首先,如果(seeded,您不能将迭代器添加到一起(在
v.begin()+v.end()
中)。请使用

auto mid = v.begin() + v.size() / 2;
其次,
end
it
是未声明的


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

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

auto mid = v.begin() + v.size() / 2;
其次,
end
it
是未声明的


最后,您不能通过指定“结束”来擦除向量的一部分。您需要使用不同的方法(作为练习).

你的代码无效,
end/it
从哪里来?你肯定不想添加开头到结尾。而且你从来没有声明过
it
end
。在询问算法之前纠正你的基本错误。为什么不呢?我意识到了,但我能解释一下吗?我遗漏了一些东西。显然。请出示真实的代码e、
couty您的代码无效,
end/it
从何而来?您肯定不想添加Begin to end。另外,您从未声明
it
end
。请在询问算法之前更正您的基本错误。为什么不?我意识到了,但我可以解释一下吗?我遗漏了一些东西。显然。请出示真正的代码,
coutWorked!为什么v.size()有效,但v.end()无效?在我正在阅读的书中给出了相同的方式,但没有解释。由于我错误的直觉,我显然遗漏了一些愚蠢的东西。@user2530836:思考一下:
v.begin()+v.end()的类型和值应该是什么
be?我很惊讶这能起作用,因为
sequed
是char,*mid是std::string。@NPE,值将是11,因为这是存在的字符数(以字符串的形式),对吗?v.begin()+v.size()不会给出相同的值吗?我意识到了我的错误。v.end()计算到最后一个元素之后的元素。对吗?有效!为什么v.size()有效,但v.end()无效?在我正在阅读的书中给出了相同的方式,但没有解释。由于我错误的直觉,我显然遗漏了一些愚蠢的东西。@user2530836:思考一下:
v.begin()+v.end()的类型和值应该是什么
be?我很惊讶这能起作用,因为
seek
是char,*mid是std::string。@NPE,值将是11,因为这是当前的字符数(以字符串的形式),对吗?v.begin()+v.size()不会给出相同的值吗?我意识到了我的错误。v.end()在最后一个之后计算元素。对吗?