Templates and Vector<type>::iterator | Sololearn: Learn to code for FREE!
New course! Every coder should learn Generative AI!
Try a free lesson
+ 1

Templates and Vector<type>::iterator

Please help on code below, is there some way i can use a generic type iterator? Or does the type have to be hard coded in? https://code.sololearn.com/cAd1gDN6V5N8/?ref=app

10th Aug 2019, 12:18 PM
Robert Atkins
Robert Atkins - avatar
11 Answers
+ 11
Robert Atkins You need to say  typename vector<T>::iterator it https://code.sololearn.com/cOezf320aryW/?ref=app
10th Aug 2019, 12:39 PM
GAWEN STEASY
GAWEN STEASY - avatar
+ 5
Hello! I think a detailed explanation is necessary here.. First : Why typename is necessary? Because iterator is a type contained inside vector<T> A vector<U> will have a different iterator type. In short to use a nested class from outside you need typename. "Inside a declaration or a definition of a template, typename can be used to declare that a dependent qualified name is a type."[cppreference] second: [ ] (auto x){//...}; Is the C++14 generic lambda and yes ~ swim ~ , it's life safer and allows you to write generics and reusable lambdas! 👍
10th Aug 2019, 11:50 PM
AZTECCO
AZTECCO - avatar
+ 5
Yes correct. Vector is a Standard Template class this means that when you create a vector<T> the compiler generates code for vector <T> using the template system . A vector<U> is a different type/class.. The vector class contains a nested class clalled iterator and it's generated just like the whole vector. So a std::vector<T>::iterator (note the scope resolution between vector and iterator ) is a type dependant on std::vector<T> type.
11th Aug 2019, 1:12 PM
AZTECCO
AZTECCO - avatar
+ 5
Nice to help! :)
11th Aug 2019, 1:37 PM
AZTECCO
AZTECCO - avatar
+ 4
Lambda : Constructs a CLOSURE : an unnamed function object capable of capturing variables in scope.[cppreference] Hence a function object can be treated as a variable (assigned, passed to function.. ) The type of a lambda "doesn't exists" it is created for every lambda expression so you need "auto" to get it.. auto myLambda = [ ](parameters){ //job...;}; <= the typical end ;}; Link: https://en.cppreference.com/w/cpp/language/lambda auto is a placeholder type specifier. In short it automatically deduce the right type.
15th Aug 2019, 7:55 AM
AZTECCO
AZTECCO - avatar
+ 3
AZTECCO thanks alot for the detailed explanation, i definitely feel like i have a better understanding of how to utulize the STL!
11th Aug 2019, 1:32 PM
Robert Atkins
Robert Atkins - avatar
+ 2
AZTECCO i think I understand, so basically when you use a template, and I'm assuming this applies to any class that utulizes a type specifier<>, when accessing a member that constructs a new object utulizing type T, the generic type T doesn't supply enough information for a proper iterator to be constructed by itself, so we use typename to specify that we need type T's specific iterator to be returned. Is this a correct way to view this? Or am i way off base?
11th Aug 2019, 12:38 PM
Robert Atkins
Robert Atkins - avatar
+ 1
GAWEN STEASY ~ swim ~ thank you two for all the help, also thanks for going the extra mile swim! I really need to start learning lambda, i tried learning them in java but i definitely dont even have a foundational knowledge of them other than understanding what they are.
10th Aug 2019, 1:23 PM
Robert Atkins
Robert Atkins - avatar
+ 1
thats from C++11 right?
15th Aug 2019, 10:06 AM
BinaryEden
BinaryEden - avatar
0
AZTECCO ~ swim ~ what is lambda and auto keyword?
14th Aug 2019, 11:23 PM
BinaryEden
BinaryEden - avatar