簡體   English   中英

找到兩個向量之間的交點

[英]Finding the Intersection between two Vectors

而且我做得非常好,事實上我找到了交叉點,並認為我有正確的代碼。 唯一的問題是它似乎沒有打印出最后一個值。

所以如果我有兩套:

9 12 7 8 1 19 11 2 14

15 10 8 2 5 16 14 7 19 0 11 3 13 18 9 17 1 12

我的代碼將產生以下輸出:

1
2
7
8
9
11
12
14

但是這些集合的正確交集應該是:

1
2
7
8
9
11
12
14
19

所以,我的代碼不打印出最后一個值,我找不到原因。

void findIntersection(vector<int> A, vector<int> B)
{
    vector<int> intersection;
    int n1 = A.size();
    int n2 = B.size();
    int i = 0, j =0;
    while(i <= n1 && j <= n2)
    {
        if(A[i] > B[j])
        {
            j++;
        }
        else if( B[j] > A[i])
        {
            i++;
        }
        else
        {
            intersection.push_back(A[i]);
            i++;
            j++;
        }
    }

    for(unsigned int i = 0; i <= intersection.size(); i++)
    {
        cout << intersection[i] << endl;
    }
}

void slowintersect(vector<vector<int> > v)
{
    vector<int> vec;
    vector<int> c;
    int store_0;

    int row = 0;
    for(size_t j =0; j < v.at(row).size(); j++)
    {
        store_0 = v[row][j];
        c.push_back(store_0);
    }

    for(size_t i = 0; i < v.size(); i++)
    {
        for(size_t k = 0; k < v.at(i).size(); k++)
        {
            vec.push_back(k);
        }
    }

    findIntersection(c, vec);
}
#include <algorithm>
#include <set>

set<int> intersect;
set_intersection(s1.begin(),s1.end(),s2.begin(),s2.end(), // sorted!
                  std::inserter(intersect,intersect.begin()));

如果你不想要std::algorithm ,你的代碼中會有幾個錯誤。 即:

for(unsigned int i = 0; i <= intersection.size(); i++)
                           ^
                        should be <

這是一個重要的錯誤:

int i = 0, j =0;
while(i <= n1 && j <= n2)
{        ^          ^
         <          <
    if(A[i] > B[j])
    {
        j++;

如果A [0]大於每個B元素,則跳過所有n-1個A元素,並結束循環

我假設你不想使用C ++標准算法。

幾件事。
1.只有在最初對兩個向量進行排序時,您的算法才有效。 是嗎?
2.您不應該訪問vector [vector.size()]元素,因為它超出了界限。

我的第二點意味着:

while(i <= n1 && j <= n2)

將此更改為

while(i < n1 && j < n2)

並改變以下內容

for(unsigned int i = 0; i <= intersection.size(); i++)

for(unsigned int i = 0; i < intersection.size(); i++)

另外, 最重要的錯誤!!!!

for(size_t k = 0; k < v.at(i).size(); k++)
            {
                vec.push_back(k);

            }

將其更改為:

for(size_t k = 0; k < v[i].size(); k++)
            {
                vec.push_back(v[i][k]);

            }

while共同dition壞了。 您必須繼續,直到兩個索引都結束。 目前,當其中一個索引到達結束時,您將停止。

當你解決這個問題,你還必須確保你不加i以后n1 ; jn2相同。

在開發過程中,您應該使用vector.at(i)而不是vector[i]來啟用安全檢查。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM