vectorを宣言する時に下のように(n)と要素数を指定しないと、
Segmentation fault: 11
とエラーが出てしまいます。
どうして出るのでしょうか。
調べると、要素数を指定しなくても、エラーにはならないみたいなのですが。。
動的配列は後でサイズを増減させることが出来るが、データ領域の確保・破棄とデータのコピー処理を伴う場合があり、若干の処理時間を要する。
なので、最初の要素数が分かっている場合は、要素数を指定してオブジェクトを作るようにした方がよい。
input.text
5 3 3 4 2 4
c++
1#include<bits/stdc++.h> 2#define rep(i, n) for (int i = 0; i < (int)(n); ++i) 3using namespace std; 4typedef long long ll; 5 6 7int main() { 8 ifstream in("../input.txt"); 9 cin.rdbuf(in.rdbuf()); 10 11 int n; 12 cin >> n; 13 vector<int> a(n); 14 rep(i,n) cin >> a[i]; 15 ・ 16 ・ 17 ・
そもそも質問にあるコード、コンパイル自体が通らないと思いますが...
( n が定義されていない... )
また、仮に vector<int> v(n) の前に int n = ... とあっても、
rep() マクロで n を使っていることから、nを要求しているはずですが n を定義していないため、エラー。
まずはメッセージを読みましょう。
メッセージは Paiza IO だと Main.cpp:8:7: error: use of undeclared identifier 'n' となっています。
( 未定義の n が使われている 系 )
また、C++14 を指定していますが、それならマクロは使わないようにしたほうがいいらしいです。
( インクルードガードとかは別として )
ご回答ありがとうございます!
マクロはなぜ使わない方がいいのでしょうか?
回答2件
あなたの回答
tips
プレビュー