为什么排序功能在下面的示例中不起作用?我没有警告也没有编译器错误。这是正常的吗?我该如何解决? 提前谢谢
#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;
}
}
答案 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