2013-09-24 7 views
1

Я начинаю и возвращаюсь к программированию через 2 месяца. Почти забыл все. Код, который я только что пытался скомпилировать, исключает вторую половину итераторов вектора usin, если нужный символ найден в первой половине.«Нет совпадений для оператора +»

Вот код:

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

} 

Пожалуйста, скажите мне, что моя ошибка есть.

Также можно забыть о программировании? Кроме того, когда-то опытный, придерживайтесь концепции навсегда, или она требует постоянной практики и чтения?

+0

Ваш код недействителен, откуда исходит 'end/it'? – billz

+0

Вы определенно не хотите добавлять Begin to End. –

+1

Плюс вы никогда не объявляете 'it' или' end'. Исправьте свои основные ошибки, прежде чем спрашивать об этом алгоритме. –

ответ

6

Прежде всего, вы не можете добавлять итераторы вместе (в v.begin() + v.end()). Вместо этого используйте

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

Во-вторых, end и it являются необъявленной.

Наконец, вы не можете удалить часть вектора, назначив «конец». Вам нужно использовать другой метод (слева как упражнение).

+0

Работал! Почему v.size() работает, но v.end() не работает? Это было дано так же в книге, которую я читаю, но не имело объяснений. Мне явно не хватает чего-то глупого из-за моей неправильной интуиции. – Slay

+0

@ user2530836: Подумайте об этом: Каким должен быть тип и значение 'v.begin() + v.end()'? – NPE

+0

Я удивляюсь, что это работает, так как 'seek' - char и * mid - std :: string. – billz

Смежные вопросы