#include <iostream>
#include <vector>
#include <algorithm> // std::min_element
#include <iterator> // std::begin, std::end
int main() {
std::vector<int> v = {5,14,2,4,6};
auto result = std::min_element(std::begin(v), std::end(v));
if (std::end(v)!=result)
std::cout << *result << '\n';
}
あなたが示すプログラムにはいくつかの問題があります。主な原因はfor
条件です: i<v[n]
. 配列を初期化して、最初の 5 つの要素をさまざまな値に設定し、残りをゼロに設定します。n
明示的に初期化した要素の数に設定されているため、v[n]
暗黙的にゼロに初期化された最初の要素です。したがって、ループ条件は最初は false であり、ループはまったく実行されません。コードは単に最初の要素を出力します。
いくつかの小さな問題:
生の配列は避けてください。それらは奇妙で一貫性のない動作をします (たとえば、配列の最初の要素へのポインターへの暗黙的な変換、代入できない、値によって関数に渡したり関数から返したりすることはできません)。
マジックナンバーは避けてください。int v[100]
配列にどこかから入力を取得させてから、100 を超える要素を処理しようとする場合、バグへの招待です。
実装ファイルでは大したことではありませんが、IMO は明示的な修飾に慣れる方が良いですが、ヘッダー ファイルに配置して不必要な名前の競合を引き起こし始めるためusing namespace std;
、盲目的にどこでも使用すると問題が発生する可能性があります。