2016-12-02 39 views
0

我用下面的代碼來說明我的問題:的std ::對,自動替換在Visual Studio 2010

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 v2 = std::minmax_element(v.begin(),v.end()); 

然後在這裏爲m y問題:如何正確使用std::pair<int,int>替代auto關鍵字?

+0

我不知道VS 2010,但在VS 2012中,如果我在'auto'聲明中將鼠標懸停在v2上,它在工具提示中顯示實際的類型(這不是一對'int',就像你在答案中看到的那樣) – grek40

回答

3

std::minmax_element返回一對ForwardIterator 的(同一類型作爲參數),所以如果你想要一雙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> 

來自標準庫的大多數算法都適用於wi th並返回迭代器(除了某些特定的std::string)。