listからvectorへ
vector はサイズを変更できる配列です。Pythonと同じ0始まりですが、範囲外アクセスを自動で安全に止めるとは限りません。
言語:C++ / 計算量:例の処理による
前提:整数型とオーバーフロー
考え方
- vector<int> a(n) で n 個の0。
- a.push_back(x) は append(x)。
- for(auto x:a) は値のコピー。変更には auto& x。
具体例
a=[1,2,3] を2倍にするなら for(auto& x:a) x*=2;。& がないと元の配列は変わりません。
実装
#include <iostream>
#include <vector>
using namespace std;
int main(){vector<int>a={1,2,3};for(auto& x:a)x*=2;for(auto x:a)cout<<x<<" ";}注意する条件
a[-1] は末尾ではありません。末尾は a.back()。空かどうかを先に確認します。
確認問題
{1,2,3} を参照ループで2倍にした末尾は?
解答と理由
6
元の3が6に更新されます。
実装課題
N と配列 A が2行。総和を long long で出す。N≤200000、|A_i|≤10^9。
入力:
3
1 2 3
出力:
6参考実装
#include <iostream>
#include <vector>
using namespace std;
int main(){int n;cin>>n;vector<long long>a(n);long long s=0;for(auto& x:a){cin>>x;s+=x;}cout<<s<<"\n";}