我使用以下代码来说明我的问题:
using namespace std;
int main()
{
int abc[8]={3, 1, 4, 1, 5, 9, 2, 6};
std::vector<int> v(abc,abc+8);
;
std::pair<int,int> v2(std::minmax_element(v.begin(),v.end()));
std::cout << '\n';
}
如果我编译上面的代码,我将在 visual studio 中出现以下编译错误:
Error 2 error C2439: 'std::_Pair_base<_Ty1,_Ty2>::first' : member could not be initialized C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163
Error 4 error C2439: 'std::_Pair_base<_Ty1,_Ty2>::second' : member could not be initialized C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163
Error 1 error C2440: 'initializing' : cannot convert from 'std::_Vector_iterator<_Myvec>' to 'int' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163
Error 3 error C2440: 'initializing' : cannot convert from 'std::_Vector_iterator<_Myvec>' to 'int' C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\utility 163
如果我使用 auto 关键字,编译错误将消失:
auto v2 = std::minmax_element(v.begin(),v.end());
那么这是我的问题:我如何使用 std::pair<int,int>
变量适本地替换 auto
关键词?
最佳答案
std::minmax_element
返回一对 ForwardIterator
1 (与其参数类型相同),所以如果你想要一对 int
你需要两个步骤:
auto v2_it = std::minmax_element(v.begin(), v.end());
// You should check here if v2_it.first != v.end()
std::pair<int, int> v2(*v2_it.first, *v2_it.second);
注意这里的auto
实际上是:
std::pair<std::vector<int>::iterator, std::vector<int>::iterator>
1 标准库中的大多数算法都使用并返回迭代器(除了一些特定于 std::string
的算法)。
关于c++ - std::pair 和 visual studio 2010 中的自动替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40934764/