C++ 迭代器的decltype作为模板参数
下面是复制我的问题的简化代码: 工作代码:C++ 迭代器的decltype作为模板参数,c++,c++11,C++,C++11,下面是复制我的问题的简化代码: 工作代码: int main(int argc, char **argv) { std::vector<int> x; std::map<char, std::vector<int>::size_type> y; y[0]=x.size(); return 0; } int main(int argc,char**argv) { std::向量x; 地图y; y[0]=x.size(); 返回0
int main(int argc, char **argv)
{
std::vector<int> x;
std::map<char, std::vector<int>::size_type> y;
y[0]=x.size();
return 0;
}
int main(int argc,char**argv)
{
std::向量x;
地图y;
y[0]=x.size();
返回0;
}
不工作代码(使用decltype):
int main(int argc,char**argv)
{
std::向量x;
//地图y;
地图y;
y[0]=x.size();
返回0;
}
代码无法编译,出现以下错误:
错误:“operator=”不匹配(操作数类型为“std::map>>::mapped_type{aka uuu gnu_cxx::uu normal_iterator>}和“std::vector::size_type{aka long unsigned int}”)
y[0]=x.size()
decltype(x.begin())
不应该等同于std::vector::size\u type
decltype(x.begin())
不应该等同于std::vector::size\u type
不,返回的是std::vector::iterator
我想你想要的是
decltype(x.size())
x.begin()
是一个迭代器,而x.size()
不是,所以不,它们是不等价的。你知道返回的是迭代器而不是整数吗?也许你应该后退几步,重新开始?如果你想知道为什么你认为它们是等价的,那会很有趣。我的意思是,你的标题已经说它是一个迭代器…查看一些引用,可能会告诉你它们的返回类型不同。@tobi303我想我是用来做一些事情的,比如it-vec.begin()
,以获取迭代器指向的当前索引。我猜这里发生了一些含蓄的表演,我的错!我在看一些类似于'it-vec.begin()'的东西,我假设它们在内部都指向同一类型
int main(int argc, char **argv)
{
std::vector<int> x;
//std::map<char, std::vector<int>::size_type> y;
std::map<char, decltype(x.begin())> y;
y[0]=x.size();
return 0;
}