2014-09-29 49 views
-1

比方說,我有一個二維數組:迭代器只有一排的向量的向量的

vector<vector<int8_t>> table = 
{ 
    {0, 1, 2, 3, 4, 5 }, 
    {22, 46, 12, 2, 35, 4 }, 
    {4, 5, 6, 22, 11, 8 }, 

}; 

如何搜索只有一排特定元素。我試圖使用迭代器,但如何告訴他們在一行的開始處開始?

因此,我總是知道要搜索哪一行,以便不需要進入循環。

例如搜索元件12的第1行。

+0

'它 - >開始()'和'它 - >結束( )'也許? – 101010 2014-09-29 07:16:42

+0

這將搜索整個數組。 – user1876942 2014-09-29 07:35:57

+0

不,它不會。由於'it'指向外部向量的向量。 – 101010 2014-09-29 07:38:34

回答

2

您可以編寫一個通用函數。例如

size_t find_element(const std::vector<std::vector<int>> &v, 
        std::vector<std::vector<int>>::size_type n, 
        int value) 
{ 
    if (v.size() <= n) return -1; 

    auto it = std::find(v[n].begin(), v[n].end(), value); 

    return it == v[n].end() ? -1 : std::distance(v[n].begin(), it); 
} 

或者你可以把一個模板函數,而不是typename std::vector<std::vector<T>>::size_type n

template <class T> 

size_t find_element(const std::vector<std::vector<T>> &v, 
        typename std::vector<std::vector<T>>::size_type n, 
        const T &value) 
{ 
    if (v.size() <= n) return -1; 

    auto it = std::find(v[n].begin(), v[n].end(), value); 

    return it == v[n].end() ? -1 : std::distance(v[n].begin(), it); 
} 

你可以使用簡單的size_t n

+0

有無論如何得到一個更普遍的功能,所以對於int8_t,int16_t等..總之,這看起來像一個非常好的解決方案。謝謝。 – user1876942 2014-09-29 08:03:52

+0

@ user1876942您可以簡單地使我顯示模板的功能。看到我更新的帖子。 – 2014-09-29 08:08:59

1

對待每一行像其他矢量一樣。

auto row_beg = table[1].begin(); 
auto row_end = table[1].end(); 
auto find_it = std::find(row_beg, row_end, 12); 
if (find_it != row_end) 
    std::cout << "Found.\n"; 
+0

謝謝,有無論如何知道什麼時候發現了物品,例子12在元素3找到然後中斷? – user1876942 2014-09-29 07:34:10

+0

@ user1876942你的意思是獲得索引?你可以嘗試'find_it - row_beg'或者'std :: distance(row_beg,find_it)'。 – 2014-09-29 07:39:15

2
auto it = std::search(table[row_index].begin(),table[row_index].end(),value);