0

hoursベクトルを反復処理して、すべての変数の合計を取得しようとしています。今、このベクター サブスクリプション エラーが発生しましたが、解決方法がわかりません。これが私のコードです:

int hulpInt = hours[0];

for (int i = hours[1]; i != hours[hours.size()-1]; i++)
{
    hulpInt = hulpInt + i;
}

int HOUR = hulpInt + hours[hours.size()];

さらにコードが必要な場合は、コメントしてください。

4

3 に答える 3

4

これを解決する2つの方法。

#include <functional>
#include <numeric>
#include <vector>

方法 1: vector.size() を使用する

int hulpInt =0;
for(int i=0;i<hours.size();i++){
    hulpInt+= hours[i];
}

方法 2 : std::accumulate を使用する

int hulpInt = std::accumulate(hours.begin(),hours.end(),0);
于 2012-06-14T19:55:00.810 に答える
3

このドキュメントを参照してください。

次のようにする必要があります。

int sum = 0;

for (int i = 0; i < hours.size(); ++i) {
    sum += hours[i];
}
于 2012-06-14T19:52:18.303 に答える
2

エラーが発生した場合は、それも含めることをお勧めします。

hours[hours.size()]具体的には、ベクトルはゼロベースのインデックスであるため、範囲外のインデックスを作成していると思います。

STL コンテナーには、境界内にとどまるのに役立つ気の利いたイテレーターがあります。

int h[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
std::vector<int> hours(h, h+12);
int total(0);
for (std::vector<int>::const_iterator i(hours.begin()); i != hours.end(); ++i)
    total += *i;

STL には、これらの反復子を使用して一般的な処理を行うアルゴリズムもあります。

#include <numeric>

int h[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
std::vector<int> hours(h, h+12);
int total = std::accumulate(hours.begin(), hours.end(), 0);

もちろん、独自のループをロールすることもできます。

int h[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
std::vector<int> hours(h, h+12);
int total(0);
for (int i(0); i < int(hours.size()); ++i)
    total += hours[i];

上記のすべては、合計で同じ結果になりますが、方法が少し異なるだけです。彼らが言うように、猫の皮を剥ぐ方法は常に複数あります。

于 2012-06-14T19:55:01.810 に答える