c++ - std::pair 和 visual studio 2010 中的自动替换

标签 c++

我使用以下代码来说明我的问题:

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返回一对 ForwardIterator1 (与其参数类型相同),所以如果你想要一对 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/

相关文章:

c++ - 在 OpenGL 中制作一个简单的形状移动(形状在数据结构中)

c++ - 我已经使用指针在 C++ 中声明了二维数组。如何将值初始化为数组

c++ - 在 C/C++ 中创建新的证书存储

c++ - 具有特定于子类的模板化参数类型的 Qt SIGNAL 架构

c++ - 声明或定义

c++ - 构建 C++ 项目以包含所有 msvc dll

c++ - 右值和左值引用作为类中的成员变量 - 有效吗?

c++ - C++中的订单维护数据结构

c++ - C++11 中类数据成员的默认初始化

c++ - if 中的 OR 语句是否只检查一个条件?平衡支架