在 2D 向量中从每一行添加最大元素,以使行元素 $A_i$ 小于 $A_(i+1)$
Adding max elements from each row in 2D vector such that row element $A_i$ is less that $A_(i+1)$
所以,我想要的是从每一行(在 2D 向量中(收集最大元素并将其推送到新向量中。如果新向量被排序,我想要所有向量元素的总和。
我试过了,但代码显示错误:"无法将'std::vector'转换为'int'赋值">
另外,我的代码是否正确?
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int t,n,v1;
vector < vector<int> > vec;
vector<int> max;
cin>>t;
while(t--)
{
cin>>n;
for(int i=0; i<n; i++)
{ vector<int> row;
for(int j=0; j<n; j++)
{
int val;
cin>>val;
row.push_back(val);
}
vec.push_back(row);
}
for (int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
v1=*max_element(vec.begin(), vec.end());
max.push_back(v1);
}
}
if(is_sorted(max.begin(),max.end()))
{
cout<<accumulate(max.begin(), max.end(),0)<<endl;
}
else
cout<<"-1"<<endl;
}
return 0;
}
在此循环中:
for (int i=0; i<n; i++)
{
for(int j=0; j<n; j++)
{
v1=*max_element(vec.begin(), vec.end());
max.push_back(v1);
}
}
您正在尝试从 vec
中获取最大的元素,这是一个向量的向量,并将其添加到 max
中,这是一个 int
的向量。可能你想要的是这样的:
for (int i=0; i<n; i++)
{
v1=*max_element(vec[i].begin(), vec[i].end());
max.push_back(v1);
}
或者使用 C++11:
for (const vector<int> &row : vec) // Or: for (const auto &row : vec)
{
v1=*max_element(row.begin(), row.end());
max.push_back(v1);
}
另外,您应该在使用之前#include <numeric>
std::accumulate
。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 使用不带参数的函数访问结构元素
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- C++如何通过用户输入删除列表元素
- lower_bound()返回最后一个元素
- 基于多个条件处理地图中的所有元素
- 调整大小后指向元素值的指针unordered_map有效?
- 使用std::transform将一个范围的元素添加到另一个范围中
- 使用函数"remove"删除重复元素
- 具有最大子序列大小的序列,每个元素都相同
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 如何将元素添加到数组的线程安全函数?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 我想访问std::unique_ptr中的一个特定元素
- 如何通过 getter 函数删除矢量的元素?
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 从控制台中删除最后打印的元素
- 擦除while循环中迭代的元素