0

Can auto be considered as vector<int> or not

Hi Please refer code below: It currently fails to compile due to last line called for vector.. Is it like auto does not work for vector<int> or Am i missing something ? https://code.sololearn.com/cj7G8w80GitG/?ref=app

17th Oct 2022, 6:17 PM
Ketan Lalcheta
Ketan Lalcheta - avatar
7 Réponses
+ 1
It will only print Hi\n when you are printing the vector. You have 3 test cases: string s1 = "Abc"; string s2 = "Abc"; printMismatch(s1,s2); => It will give no mismatch between Abc and Abc string s3 = "Abc"; string s4 = "Axc"; printMismatch(s3,s4); => It will give b x vector<int> v1{1,2,3}; vector<int> v2{1,2,5}; printMismatch(v1,v2); => It will give 3 5 Note: On the 3rd case you are not printing the vector, instead you are printing the differences Let's put another test case: vector<int> v1{1,2,5}; vector<int> v2{1,2,5}; printMismatch(v1,v2); => It will give No mismatch between [ 1 2 3 ]Hi and [1 2 3]Hi
17th Oct 2022, 10:18 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
+ 5
As @Tomás Ribiero said, you can't print vectors. On line 15, you are printing 's1' and 's2' which are 'vector<int>&'.
18th Oct 2022, 3:31 AM
XXX
XXX - avatar
+ 1
If you read the error the compiler is complaining about the << operator on cout. The problem is you can't cout a vector. What you really want is to overload the << operator: https://stackoverflow.com/questions/4077609/overloading-output-stream-operator-for-vectort). To make it simpler I implemented the overload: https://www.sololearn.com/compiler-playground/cBVgP5t40CEX
17th Oct 2022, 9:13 PM
Tomás Ribeiro
Tomás Ribeiro - avatar
+ 1
Thanks Tomás Ribeiro ... I had this doubt when checked error but how come it can be issue ? I am not printing vector.... I am dererencing pair of two iterators And as data is int for vector, cout should be fine to print it Also in your code, I tried adding below line os << " Hi\n"; in overloaded << but it's not printing...so clear that it's not required....am I missing something ?
17th Oct 2022, 9:39 PM
Ketan Lalcheta
Ketan Lalcheta - avatar
+ 1
#include <iostream> #include <algorithm> using namespace std; void printMismatch(auto& s1,auto& s2){ auto itr = mismatch(s1.begin(),s1.end(),s2.begin()); if (*itr.first != *s2.end()) cout << *itr.first << " " << *itr.second << endl; else cout << "No mismatch found \n"; } int main(){ string s1 = "Abc"; string s2 = "Abc"; printMismatch(s1,s2); string s3 = "Abc"; string s4 = "Axc"; printMismatch(s3,s4); vector<int> v1{1,2,3}; vector<int> v2{1,2,5}; printMismatch(v1,v2); }
18th Oct 2022, 4:15 AM
Bob_Li
Bob_Li - avatar
0
Thanks Tomás Ribeiro and XXX
18th Oct 2022, 4:11 AM
Ketan Lalcheta
Ketan Lalcheta - avatar
0
Tomás Ribeiro overloading the << feels like overkill.😁 just simplify the no mismatch else statement... Ketan Lalcheta you are using cout on the vectors in your "no mismatch found" else statement.
18th Oct 2022, 4:16 AM
Bob_Li
Bob_Li - avatar