Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 迭代器的decltype作为模板参数_C++_C++11 - Fatal编程技术网

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;
}