2013-09-24 101 views
1

我是初學者,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; 

} 

請告訴我,我的錯誤是什麼。

另外,編程可以被遺忘嗎?此外,一旦精通,這個概念永遠留下,還是需要不斷的練習和閱讀?

+0

你的代碼無效,'end/it'從哪裏來? – billz

+0

你絕對不想添加Begin to End。 –

+1

另外你從不聲明'it'或'end'。在詢問算法之前更正基本錯誤。 –

回答

6

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

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

其次,endit是未申報。

最後,您不能通過分配「結束」來擦除部分矢量。你需要使用不同的方法(留作練習)。

+0

工作!爲什麼v.size()可以工作,但v.end()不能?它在我正在閱讀的書中以同樣的方式給出,但沒有解釋。由於我錯誤的直覺,我顯然錯失了一些愚蠢的東西。 – Slay

+0

@ user2530836:想一想:'v.begin()+ v.end()'的類型和值應該是什麼? – NPE

+0

我很驚訝這個工程,因爲'尋求'是char和* mid是std :: string。 – billz