所以我需要從末尾或相反順序的 2 個向量之間的公共值。而且一旦我找到了共同價值,我不在乎是否存在更多共同價值。
好的,一開始對我來說聽起來也很容易,但現在我在一天內看到的向量語法比以往任何時候都多。所以,最后我在這里尋求幫助。
示例:
輸入
v1: 32, 64, 90
v2: 32, 64, 78
輸出:
64
我從 python 語法中獲取的第一次嘗試:
vector<int>::iterator it1 ;
vector<int>::iterator it2 ;
for(it1 = v1.end() && it2 = v2.end(); it1!=v1.begin() && it2!=v2.begin(); it1-- && it2--){
if (*it1==*it2) { //please ignore if the inner syntax is wrong
res=*it1; //because I already tried a lot of syntaxes so really confused right now
break; //Please look at the for loop
}
這個,沒用。所以,我想也許我沒有正確迭代 2 個向量。我在谷歌上查看了相同的內容,stackoverflow 網站向我展示了使用zip它在我的比賽頁面上不起作用的內容。
接下來,我嘗試過,
vector<int>::iterator it1 = v1.end();
vector<int>::iterator it2 = v2.end();
while(it1 != v1.begin() || it2 != v2.begin())
{
if (*it1 == *it2){
cout<<*it1<<" "<<*it2<<endl; //Output for the same is below
res=*it1;
break;
}
if(it1 != v1.begin())
{
it1;
}
if(it2 != v2.begin())
{
it2;
}
}
它編譯成功,并輸出,
0 0
所以,你能幫我嗎?是否存在可以幫助我的內置函式或存在小錯誤,我可以繼續改進
提前致謝。
uj5u.com熱心網友回復:
使用反向迭代器,向后迭代就像向前迭代一樣簡單。您只需要一個回圈并行增加兩個迭代器并檢查元素是否相等:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v1{32, 64, 90};
std::vector<int> v2{32, 64, 78};
auto it1 = v1.rbegin();
auto it2 = v2.rbegin();
auto it_result = v1.rend();
for (; it1 != v1.rend() && it2 != v2.rend(); it1, it2){
if (*it1 == *it2) {
it_result = it1;
break;
}
}
if (it_result != v1.rend()) std::cout << *it_result;
}
uj5u.com熱心網友回復:
正如評論中所建議的,可以使用std::mismatch與適當的謂詞和反向迭代器的用法:
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v1 = { 32, 100, 64, 90, 12 };
std::vector<int> v2 = { 32, 100, 64, 78, 120 };
auto pr = std::mismatch(v1.rbegin(), v1.rend(), v2.rbegin(),
[&](int n1, int n2) { return n1 != n2; });
std::cout << *(pr.first) << "\n";
}
輸出:
64
基本上我們告訴std::mismatch跳過不相等的值,直到找到相等的值。在這種情況下,“不匹配”是相等的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329630.html
標籤:C
