问题描述
我正在尝试获取迭代器指向的二维数组之外的最大值。
示例
输入
数据 = {{},{3,11,4},{1,2},{5,6}};
最大 = 11
我有一个二维数组,使用 max_element
我试图从数组中的值中获取最大值。
使用一维迭代器,您可以取消引用迭代器并获得值,即 *iteratorOneD
。但是我怎么能用 2d 迭代器做这样的事情?
我尝试了一些这样的事情。
vector<vector <int>>::iterator position;
position = std::max_element(Data.begin(),Data.end());
int max = *position[0];
cout<< *position << endl;
C2440 "Initialisierung": "std::vector
cout << *position << endl;
的输出是 std::vector(1062256,1027080)
。
我希望能够将这些值之一分配给 int max
。
解决方法
您可以在“外部”std::max_element
创建一个迭代器来跟踪迄今为止最大的元素。
int main() {
std::vector<std::vector<int>> Data{{},{3,11,4},{1,2},{5,6}};
// find the first non-empty vector
auto ne = std::find_if(Data.begin(),Data.end(),[](auto& v) { return !v.empty(); });
if(ne == Data.end()) return 1; // no elements in **any** inner vector
// set the inner iterator to the max element in the first non-empty vector
auto inner = std::max_element(ne->begin(),ne->end());
auto position = std::max_element(ne,[&inner](auto&,auto& v2) {
if(v2.empty()) return false;
// find the max_element in this inner vector
auto tmp = std::max_element(v2.begin(),v2.end());
// is it greater than the one we had stored
if(*inner < *tmp) {
inner = tmp;
return true;
}
return false;
});
std::cout << "the vector ";
for(auto& col : *position) std::cout << col << ' ';
std::cout << "contains the max element " << *inner << '\n';
}
输出:
the vector 3 11 4 contains the max element 11
,
从 C++20 开始,您可以使用范围视图从二维向量创建一维视图
final routes = <String,WidgetBuilder>{
'/one': (BuildContext context) => PageOne(),'/two': (BuildContext context) => PageTwo(),...
};
runApp(MaterialApp(initialRoute: '/one',routes: appRoutes));
然后使用范围算法,您可以找到最大元素
auto as1D = Data | std::views::join;
这是一个demo