对矢量排序不起作用

时间:2016-07-21 14:09:01

标签: c++ vector scope iterator

为什么排序功能在下面的示例中不起作用?我没有警告也没有编译器错误。这是正常的吗?我该如何解决? 提前谢谢

#include <iostream>
#include <cmath>
#include <boost/shared_ptr.hpp>
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <iterator>


int main (){

    typedef std::vector<double> VecDoub;    
    VecDoub a;
    a.push_back(2.01);
    a.push_back(1.01);
    a.push_back(0.01);
    a.push_back(4.01);

    VecDoub::iterator it = a.begin();

    while (it != a.end()){
        std::cout << *it << std::endl;
        ++it;
    }

    std::sort(a.begin(), a.end());

    while (it != a.end()){
        std::cout << *it << std::endl;
        ++it;
    }
}

3 个答案:

答案 0 :(得分:4)

您忘记在第二个=IIF(Fields!DUE_DATE.Value = max(Fields!DUE_DATE.Value, "PART_NO"), "PurchasePart", False, True) 之前将it重置为a.begin()

答案 1 :(得分:2)

在第一个循环之后,迭代器it等于a.end().结果,第二个while循环不会被执行。

当局部变量的范围太大时,这是一个普遍的错误。:) 您可以使用for循环来代替while循环,而变量包含每个循环的范围。

for ( VecDoub::iterator it = a.begin(); it != a.end(); ++it; ){
    std::cout << *it << std::endl;
}

或者使用基于范围的for循环会更好。例如

for ( auto x : a ) std::cout << x << std::endl;

答案 2 :(得分:0)

您的排序功能&#34;排序&#34;你的容器正确,但你的控件没有进入你的第二个while循环来显示结果,因为它的破坏条件是有效的:var some_name = 'Some Name'; some_name = browser.getTitle().then(function(webpagetitle){ if (webpagetitle === 'Some Name'){ return 'Some Other Name'; }else{ return 'Some Name'; } }); expect(some_name).toEqual('Some Other Name'); 。所以你思想它没有排序实际上你没有看到它。

这应该有效:

it == a.end