R
RCS
I have this Functor:
typedef std::vector < std::string > String_vec;
typedef std::vector < String_vec > StrVec_vec;
class Compare : public std::unary_function<String_vec, void>
{
public:
StrVec_vec myData;
Compare(StrVec_vec const& data) : myData(data) {}
void operator() (const String_vec& data) const
{
StrVec_vec datax = myData;
std:air<StrVec_vec::iterator, StrVec_vec::iterator > range =
std::equal_range(datax.begin(), datax.myData.end(), data,
DataCompare());
}
};
This one above compiles fine (Visual Studio 7.0), but the assignment of
myData to datax seems a waste, and I would rather have it this way:
.....
void operator() (const String_vec& data) const
{
std:air<StrVec_vec::iterator, StrVec_vec::iterator > range =
std::equal_range(myData.begin(), myData.myData.end(), data,
DataCompare()); // I access myData directly in the loop instead of first
assigning it to datax and then using datax in the loop
}
......
BUT this last variant does not compile ??????????????????? (Error message
"..... cannot convert parameter 1 from 'const std::vector<_Ty,
_Ax>::const_iterator' to 'std::vector<_Ty, _Ax>::_Tptr .............")
Anyone got a clue why myData variable is OK as an assignment to a temporary,
and this temporary is OK in the loop, while myData is not OK in the loop?
This does not make sense to me!
RCS
typedef std::vector < std::string > String_vec;
typedef std::vector < String_vec > StrVec_vec;
class Compare : public std::unary_function<String_vec, void>
{
public:
StrVec_vec myData;
Compare(StrVec_vec const& data) : myData(data) {}
void operator() (const String_vec& data) const
{
StrVec_vec datax = myData;
std:air<StrVec_vec::iterator, StrVec_vec::iterator > range =
std::equal_range(datax.begin(), datax.myData.end(), data,
DataCompare());
}
};
This one above compiles fine (Visual Studio 7.0), but the assignment of
myData to datax seems a waste, and I would rather have it this way:
.....
void operator() (const String_vec& data) const
{
std:air<StrVec_vec::iterator, StrVec_vec::iterator > range =
std::equal_range(myData.begin(), myData.myData.end(), data,
DataCompare()); // I access myData directly in the loop instead of first
assigning it to datax and then using datax in the loop
}
......
BUT this last variant does not compile ??????????????????? (Error message
"..... cannot convert parameter 1 from 'const std::vector<_Ty,
_Ax>::const_iterator' to 'std::vector<_Ty, _Ax>::_Tptr .............")
Anyone got a clue why myData variable is OK as an assignment to a temporary,
and this temporary is OK in the loop, while myData is not OK in the loop?
This does not make sense to me!
RCS