###サンプルプログラムについて
1、strは、char型の変数名によく使われる
2、vluは、int型の変数名によく使われる
###処理時間について
1、配列の最初に何かを付け加える場合は、残りをひとつずつ後ろにずらすので、処理時間は大きい
2、配列に代入する時間*2=配列の値を見る時間=配列同士を比較する時間=計算(2*4)する時間*2
###windows10上でソフトを作る方法が書いてあるWEBページ(超初心者用)
一応、C言語の基本はマスターしています(苦C程度は)
###宜しくお願いします
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
「プログラムの基礎知識」とありますが、C言語のようですのでC言語について説明します。以下の回答は特に言及しなければC言語を前提としており、他の言語でも同じであると限りませんので、予めご了承ください。
サンプルプログラムについて
1、strは、char型の変数名によく使われる
文字列(string)を表す変数について、stringの略としてstrという名前を使うことはよく見られる傾向です。C言語の文字列を表現する場合は、ヌル終端文字列と言われるものを使うことが多く、それらはの多くは、char
の配列(ASCIIやマルチバイト文字コードの場合等)、wchar_t
の配列(システムのUnicode文字列を使う場合等)、char16_t
の配列(UTF-16を使う場合など)、char32_t
の配列(UTF-32を使う場合など)のいずれかです。しかし、中には、WindowsのLPTSTRのようにコンパイル時のオプションによって切り替わる物もあります。
よって、strは文字列を表す変数の変数名に使われる事が多いとは言えますが、その型が何であるかは、プログラムによって様々であり、どれであるかを決めることはできません。その他、単にsとする場合も見られます。
なお、文字列ではなく文字だけを表すchar型にstrという変数名を付けた場合、変数名は文字列なのに、実際は文字という矛盾な命名になるため、要らぬ混乱の元になるでしょう。
2、vluは、int型の変数名によく使われる
**値(value)**を表す変数の変数名に、valueの略としてvalという名前を使うのはよく見られる傾向です。ただし、valは言語によっては予約語になっている場合もあるため、避ける人も居ます。また、単にvとする場合もあります。
ここでの「値」は様々な物です。言ってしまうと、全ての変数は何らかの値です。整数値も浮動小数点数値も真偽値も値です。値がどんな型なのかは文脈から判断する以外に無く、その型が何であるかを前提とするとはできません。そのため、マップなどでのkey, valueのペアのような使い方以外は敬遠される傾向があります。
なお、valueをvluと略しているのは見たことが無いため、valueではなく全く別の略語の可能性がありますが、私にはわかりませんでした。
処理時間について
1、配列の最初に何かを付け加える場合は、残りをひとつずつ後ろにずらすので、処理時間は大きい
Cの配列に対して、先頭や末尾に追加する、間に挿入する、先頭や末尾や間を削除する、といった操作を直接できません。できる操作はそれぞれの要素に対して取得と置換をするだけです。一度に移動(memmove)や一度にコピー(memcpy)は用意されていますが、基本は一つ一つを読み込んで代入していく操作の繰り返しを行っているに過ぎません。
では、実際に「配列の最初に何かを付け加える」という操作が全くできないかというとそうではありません。mallocで確保されている配列であれば次のような操作で可能です。
- 配列をreallocで一つ増やす。
- 拡張した配列の「先頭から最後一つ手前」を配列の「2番目から最後」にずらしてコピーする。(memmoveを使うと関数一つでできますが、計算量はO(n)です。)
- 拡張した配列の先頭に付け加える値を入れる。
つまり、計算量はO(n)になります。配列が長ければ長いほど時間がかかる処理になります。
ただし、これはC言語の普通の配列の場合です。構造体などを使って独自に拡張した配列のような物であれば、速度を向上させる工夫ができないわけではありません。
2、配列に代入する時間*2=配列の値を見る時間=配列同士を比較する時間=計算(2*4)する時間*2
ある処理はある処理の2倍であるとか、3倍であるとは、コンパイラの最適化によって最も速い処理に置き換わる場合があるため重要ではありません。
競技プログラミングでの速度を考えているようですが、競技プログラミングにおいて重要なのはアルゴリズムの計算量と使用する関数の計算量です。
計算量とはランダウの記号(O(x)と言う書き方)を使った、与えられた数が増加した場合に、計算にかかる時間がどれだけの割合で増えていくかという物です。
例えば、長さnの配列に対して、計算量O(n)の処理があった場合、10個の配列では10秒かかれば、100個の配列では100秒かかるという計算になります。同様にO(n^2)(n^2はnの2乗を表す)の場合、10個の配列に100秒かかれば、100個の配列に10,000秒かかることになります。データが2倍になれば処理量が4倍になるため、大きな配列が与えられると計算が終わらなくなってしまいます。
そのため、競技プログラミングではこのO(x)のところが少なくなるアルゴリズムを考えるのが重要になります。O(n)よりもO(log n)とかO(√n)とかになるほうが遥かに計算時間が少なくなるからです。使っている関数や演算も重要です。memmoveのような処理はO(n)と非常に大きく、これをループで回すとすぐにO(n^2)とかになって、時間がかかります。なので、それらを使わなくてもできる方法を考えていくのが、競技プログラミングです。
処理が2倍や3倍になるかならないかは些細な問題です。ギリギリ間に合わないといった事があれば見直しも必要かも知れませんが、気にしても仕方がありません。C++では後置インクリメントを通常のクラス型になるべく使うなと言った程度は覚えておくべきかも知れませんが、ほとんどの場合は、書き方など最適化によって吸収されるため、こだわっても意味がありません。
投稿2017/08/01 10:37
編集2017/08/01 10:39総合スコア21735
0
サンプルプログラムについて
1、strは、char型の変数名によく使われる
2、vluは、int型の変数名によく使われる
ローカルなルールなので、基礎知識ではないですね。
これから開発に従事するという面で基礎的な、に置き換えるとすると、
プロジェクトにコーディング規約があるかどうかを確認することではないでしょうか。
追記
処理時間について
1、配列の最初に何かを付け加える場合は、残りをひとつずつ後ろにずらすので、処理時間は大きい
言語によるかと思いますが、基本的に配列はポインターで管理されていますので、リンク情報を書き換えるだけですから処理時間はそれほど大きくはなりません。
2、配列に代入する時間*2=配列の値を見る時間=配列同士を比較する時間=計算(2*4)する時間*2
認識は正しいとは言えません。
「配列の値を見る時間」と「配列同士を比較する時間」は明らかに「配列の値を見る時間」<「配列同士を比較する時間」になります。
※値の比較は少なくとも2つの項目を参照するので。
なぜそう思ったかの根拠を示せば、もっと別な回答があるかもしれません。
そもそもそれを知って、何に役立てようとしているのかに興味があります。
windows10上でソフトを作る方法が書いてあるWEBページ(超初心者用)
漠然としすぎてますね。
少なくとも言語を限定しないと、広範囲すぎて。
追記
Cのプログラムの作成とコンパイルの手順
MinGW - gccのコンパイルと実行
質問者様の環境に適合するかどうかは分かりませんが、参考までに。
google先生に聞いただけなので、他にもあると思いますよ。
投稿2017/08/01 05:07
編集2017/08/01 10:17総合スコア25195
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/01 06:17
2017/08/01 06:41
2017/08/01 07:49
2017/08/01 10:26
2017/08/01 23:37
2017/08/13 03:03
0
strは、char型の変数名によく使われる
コーディング規約次第だが、char型の配列、もしくはそれを指すポインタの名前に用いられることが多い。char型1文字にstrを使うことはまずない。
vluは、int型の変数名によく使われる
valueの略と解釈するなら、よく使うかもしれません(私はnをよく使うけど)。
配列の最初に何かを付け加える場合は、残りをひとつずつ後ろにずらすので、処理時間は大きい
挿入があるなら、基本的に正しい。
配列に代入する時間*2=配列の値を見る時間=配列同士を比較する時間=計算(2*4)する時間*2
ごめんなさい、どんな状況の話をしているかよく分かりませんでした。
投稿2017/08/01 03:48
総合スコア1720
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/01 05:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/08/01 10:44