我是C++的新手,所以這可能是一個簡單的問題,但我正在通過Stanley Lippman的C++書籍進行工作,並且有一個練習,您應該在其中編寫一個針對整數向量的非常基本的搜索功能。基本上只需遞增迭代器,直到找到所需內容,然後將迭代器返回給元素。比較迭代器時奇怪的(?)行爲
我的第一個問題是,在書中寫着「不要忘記處理元素無法找到的情況」 - 你會怎麼做?在Java中,我會返回一個null,但我想這不是在C + +(nullptr?)?
第二個問題是,它爲什麼不起作用?我認爲如果我找不到它,我只會返回end() - 迭代器,因爲它是最後一個元素的後面的一個元素(因此,不指向向量中的元素),但我無法獲得比較工作,它說「找到了!」在每一個數字上,當我嘗試它。
#include <vector>
#include <iterator>
#include <iostream>
const std::vector<int>::iterator
search (std::vector<int> v, const int find) {
auto beg = v.begin();
const auto end = v.end();
while (beg != end) {
if (*beg == find) {
return beg;
}
++beg;
}
return beg; // This can only be reached if beg = v.end()?
}
int
main() {
std::vector<int> v;
v.insert(v.end(), 2);
v.insert(v.end(), 5);
v.insert(v.end(), 10);
v.insert(v.end(), 7);
v.insert(v.end(), 12);
for (int i = 0; i < 16; ++i) {
std::vector<int>::iterator b = search(v, i);
std::cout << i;
if (std::distance(b, v.end()) == 0) {
std::cout << " not found!";
} else {
std::cout << " found!";
}
std::cout << std::endl;
}
return 0;
}
與輸出如下:
$ ./a.exe
0 found!
1 found!
2 found!
3 found!
4 found!
5 found!
6 found!
7 found!
8 found!
9 found!
10 found!
11 found!
12 found!
13 found!
14 found!
15 found!
爲什麼你使用'std :: distance'?只要檢查'if(b == v.end())' – clcto 2014-10-30 19:56:28
你正在製作一個向量的副本。返回該副本的迭代器效果不佳。 – chris 2014-10-30 19:56:29