查找std::vector最小值及相应的索引位置
时间: 2023-07-20 13:14:07 浏览: 66
你可以使用C++标准库提供的min_element函数来查找std::vector中的最小值及相应的索引位置。具体代码如下:
```c++
#include <vector>
#include <algorithm>
int main() {
std::vector<int> vec = {3, 5, 1, 4, 2};
auto it = std::min_element(vec.begin(), vec.end()); // 查找最小值
int min_value = *it; // 最小值
int min_index = it - vec.begin(); // 最小值对应的索引位置
return 0;
}
```
在上面的代码中,min_element函数返回一个迭代器,指向std::vector中的最小值。使用迭代器减去vector.begin(),可以得到最小值对应的索引位置。
相关问题
给你一个n * m 的矩阵,求这个矩阵的鞍点数量。 鞍点是这样一个元素:它是所在行最大值,且为所在列最小值。 Input 第一行两个数n m。 余下n行每行m个整数。 Output 一个非负整数,代表鞍点的数量。 Sample Input 2 2 10 9 -3 -10 Sample Output 1 HINT n, m <= 50。所有输入的数在int范围内。 c++
您可以使用以下的C++代码来实现对矩阵鞍点数量的计算:
```cpp
#include <iostream>
#include <vector>
int main() {
int n, m;
std::cin >> n >> m;
std::vector<std::vector<int>> matrix(n, std::vector<int>(m));
// 读取矩阵元素
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
std::cin >> matrix[i][j];
}
}
int count = 0;
// 遍历每一行,找到鞍点
for (int i = 0; i < n; i++) {
int max_row = matrix[i][0]; // 当前行的最大值
int col_index = 0; // 最大值所在列的索引
// 找到当前行的最大值及其所在列的索引
for (int j = 1; j < m; j++) {
if (matrix[i][j] > max_row) {
max_row = matrix[i][j];
col_index = j;
}
}
bool is_saddle_point = true;
// 判断是否为鞍点
for (int k = 0; k < n; k++) {
if (matrix[k][col_index] < max_row) {
is_saddle_point = false;
break;
}
}
if (is_saddle_point) {
count++;
}
}
std::cout << count << std::endl;
return 0;
}
```
希望对您有所帮助!如有任何疑问,请随时提问。
给你一个正整数n和一个长度为n的整数数列 ,请计算出每个元素距离数列 中的0的最短距离。 Input 第一行包含一个正整数n 第二行包含n个整数的数列 , Output 打印一个数列 , 表示 与跟它最近的0的距离,用C++代码
以下是用C++编写的代码,用于计算每个元素距离数列中的最近的0的距离:
```cpp
#include <iostream>
#include <vector>
#include <climits>
#include <cmath>
std::vector<int> calculateDistances(int n, std::vector<int>& nums) {
std::vector<int> distances(n, INT_MAX); // 初始化距离数组,初始值为最大整数
int lastZeroIndex = -1; // 上一个0的索引位置
// 从左到右遍历,更新距离
for (int i = 0; i < n; i++) {
if (nums[i] == 0) {
distances[i] = 0; // 当前元素为0,距离置为0
lastZeroIndex = i;
} else if (lastZeroIndex != -1) {
distances[i] = i - lastZeroIndex; // 计算当前元素与上一个0的距离
}
}
lastZeroIndex = -1; // 重新设置上一个0的索引位置
// 从右到左遍历,更新距离
for (int i = n - 1; i >= 0; i--) {
if (nums[i] == 0) {
distances[i] = 0; // 当前元素为0,距离置为0
lastZeroIndex = i;
} else if (lastZeroIndex != -1) {
distances[i] = std::min(distances[i], lastZeroIndex - i); // 更新距离为左右两侧最小值
}
}
return distances;
}
int main() {
int n;
std::cin >> n; // 输入正整数n
std::vector<int> nums(n);
for (int i = 0; i < n; i++) {
std::cin >> nums[i]; // 输入整数数列
}
std::vector<int> distances = calculateDistances(n, nums);
// 打印结果
for (int i = 0; i < n; i++) {
std::cout << distances[i] << " ";
}
std::cout << std::endl;
return 0;
}
```
你可以使用上述代码来计算每个元素与最近的0的距离。希望对你有所帮助!如果还有其他问题,请随时提问。