我想在我的数据集中找到最小值。
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>
int main(){
std::vector<double> v;
std::ifstream inputFile1("263_V01_C02_R099_THx_BL_128H.dat");
if (inputFile1) {
double value;
while ( inputFile1 >> value ) {
v.push_back(value);
}
}
auto result = std::min_element(std::begin(v), std::end(v));
}
我已经看过以前的回复,人们指的是没有包含迭代器。如何解决这个问题?
答案 0 :(得分:3)
auto
是 C ++ 11 说明符。你需要一个C ++ 11编译器。
使用 gcc ,您可以使用-std=c++11
启用C ++ 11功能:
gcc exaple:
g++ -std=c++11 main.cpp
自动说明符(自C ++ 11起) 指定将从其初始化程序自动推导出声明的变量的类型。
如果您没有C ++ 11编译器,那么您需要定义具体类型。 例如:
std::vector<double>::iterator result = ...
BTW:std::begin()
和std::end()
也是C ++ 11的功能。
答案 1 :(得分:2)
正如sergej已经指出的那样auto
是一个C ++ 11说明符/关键字。
如果您无法访问C ++ 11编译器,您仍然可以使用它来使代码正常工作。
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <iterator>
int main() {
std::vector<double> v;
std::ifstream inputFile1("263_V01_C02_R099_THx_BL_128H.dat");
if (inputFile1) {
double value;
while (inputFile1 >> value) {
v.push_back(value);
}
}
double result = 0; //Or other default value
std::vector<double>::iterator minIter = std::min_element(v.begin(), v.end());
if (minIter != v.end())
{
result = (*minIter);
}
std::cout << "Result is " << result << std::endl;
}
其他提示:
在这种情况下,代码中的 auto
与std::vector<double>::iterator
相同。所以你将得到一个迭代器。
在使用之前,应始终检查.end()
的返回值迭代器。
修改强>:
正如sergej和NathanOliver所指出的那样,使用v.begin()
和v.end()
代替std::begin(v)
和std::end(v)
。