質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyPy

PyPy(パイパイ)は、RPythonで記述されたPythonの実装のひとつです。CPythonとの互換性に重点を置いて開発されており、コードを必要に応じて機械語にコンパイルする「JITコンパイル機能」を備えています。

Q&A

解決済

3回答

6973閲覧

競プロにおける言語選択について

renge

総合スコア18

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyPy

PyPy(パイパイ)は、RPythonで記述されたPythonの実装のひとつです。CPythonとの互換性に重点を置いて開発されており、コードを必要に応じて機械語にコンパイルする「JITコンパイル機能」を備えています。

1グッド

1クリップ

投稿2020/09/02 14:26

軽い質問なので軽い感じで書かせていただきます。

競プロ界隈ではだいたいC++が一番多くて次点でPython(PyPy含む)みたいな勢力図なのかなぁと勝手に思っているのですが、皆さんはこの二択を迫られた場合はどうされますか?
個人的にはC++よりPythonで実装したほうが開発時間が大幅に短縮される気がするのでTLE吐かれない限りはPython使うのはかなりアリな選択肢何じゃないかと思ってます。C++はまだほとんど使ったことないんですが調べた感じだとやはりPythonの方がライブラリが豊富で気にしなければいけないことも少なそうな印象で結構開発時間に差が出るんじゃないかなって思うんですけど、要は慣れの問題でC++でもPythonなどのスクリプト言語にそう大差つけられずにさくっと実装できるもんなんですか?

spoofy_dragon👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renge

2020/09/03 13:28

申し訳ありませんが、個人的に満足する回答が得られたことと、この質問をより具体的にする方法が思い当たらなかったのでこのままにさせてください。以後、このような質問をしないように心がけます。申し訳なかったです。
guest

回答3

0

ベストアンサー

自分は競プロは teratail の質問に回答するときぐらいしか問題を解いたりはしないので、参考にならないかもしれませんが、普段 Python、C++ を使っています。

競プロ界隈ではだいたいC++が一番多くて次点でPython(PyPy含む)みたいな勢力図なのかなぁと勝手に思っているのですが、皆さんはこの二択を迫られた場合はどうされますか?
個人的にはC++よりPythonで実装したほうが開発時間が大幅に短縮される気がするのでTLE吐かれない限りはPython使うのはかなりアリな選択肢何じゃないかと思ってます。

競プロを通してなにを学びたいかによるのではないでしょうか。
言語の勉強を兼ねるなら、その言語で競プロをやると、言語仕様やライブラリにも詳しくなれるのでいいのではないでしょうか。(Python 使えるようになりたいなら Python)


アルゴリズムの勉強をメインにするなら、Python より C++ を選択することをおすすめします。
理由は、Python はライブラリが充実してるためそれらを活用するとアルゴリズムの実装の勉強にはならないということと、Python は C++ に比べて100倍ぐらい遅いため、Python の標準ライブラリを使わないで、愚直に for 文を書いたりすると、アルゴリズムは全く同じでも TLE になったりします。

TLE にならないためには、内包記法を使う、numpy や標準ライブラリを使うとかアルゴリズムの計算量とは関係ない部分で高速化に気を使う必要が出てきます。
numpy や標準ライブラリを使うほうがなぜ早いのかというと、それらは C で書かれていて、Python からはそのコードを呼び出しているだけだからです。(計算量は全く同じでも for で加算するより sum() を使うほうが早い)
なので、Python で高速化するにはできるだけ Python 上でコードが実行されないようにするという本末転倒?なことになります。

要は慣れの問題でC++でもPythonなどのスクリプト言語にそう大差つけられずにさくっと実装できるもんなんですか?

競プロを解くために必要なコード量は数十行 ~ 百行程度なので、その言語に同程度に習熟していると仮定するならば、C++ と Python どちらで書いてもコーディングにかかる労力はさほど変わらないと思います。

投稿2020/09/02 15:29

編集2020/09/02 15:50
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renge

2020/09/02 20:07

ベストアンサー迷ったのですが、高評価の数と個人的な好みでつけさせていただきました。 前回に引き続いて回答ありがとうございました。労力に差が出ないというのは驚きでした。回答ありがとうございました
tiitoi

2020/09/03 02:27 編集

1つ前の質問でCで書いてましたが、たしかに C は Python と比べてかなり面倒です。C++ であれば、文字列や配列の扱いがCよりずっと楽です。 例えば、配列を一個ずつ走査するのは Python とほぼ同じ書き方でできます。 Python -> for x in array: C++ -> for(auto x : array) ただ C++ は言語仕様が複雑なので、習得するための学習コストは Python よりかかります。
renge

2020/09/03 13:24

tiitoiさんの習熟すればそう差分はないと言う言葉を聞いて本格的にC++勉強し始めたのですがこれは凄いですね。おっしゃる通りpythonでの「当たり前」がCに比べて格段に実現されており、感動しっぱなしです。新しい言語を学ぶ後押しをしてくださり本当にありがとうございました!
guest

0

C++がよく使われる理由は以下の通りです。
・回せるループ回数が多い(10の8乗回程度)
・参考コードが多い
・解説がだいたいC++

逆に、Pythonを使わない理由は以下の通りです。
・回せるループ回数が少ない(10の6乗程度)
・標準入力、標準出力が遅い

主にループ回数の違いが大きい要因ですが、これはアルゴリズム次第で解決できます。
しかし、解くまでの時間が評価に大きく影響する競プロでは全探索でサクッと実装した方が良い場面が多いです。
ただ、全探索するとなるとループ回数がネックになってしまうため、回せるループの回数が多いC++を自然と採用せざるを得なくなります。

私がC++をよく使っているので、C++よりの話をしました。
が、PyPyを使う前提であれば、PythonかC++かは気にしなくても大丈夫です。
PyPyとC++ではループ回数に大きな差はありません。

投稿2020/09/02 16:03

ELBE

総合スコア305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renge

2020/09/02 20:05

やはりPyPyって結構Pythonと差が出るんですね。ループ回数に差がないというのは驚きました。回答ありがとうございました
guest

0

軽い質問なので軽い感じで書かせていただきます。

軽い回答なので軽い感じで書かせていただきます。
数年前に1度入門JAVAとpython3を勉強してブランク空けて最近C++を1から勉強しつつAOJとAtCoderやり始めた初心者です。
まず大前提ですが私は実務でプログラミングしているわけではなくただの趣味です。

ぶっちゃけやれる言語がpython3しかないならとりあえずやっちゃえば?
というのが質問を見た正直な感想です。

百花繚乱!なないろ言語で競技プログラミングをする資料まとめ
探せばいくらでもありますが簡単な練習問題からやってみて何か苦しいと感じたら新しい言語に切り替えるくらいの軽い気持ちでさっさとやり始めたほうが良いと思います。

TLE吐かれない限り

というキーワードが出るということは使い方によってはpython3が遅いという認識はあるかと思います。
実際に教プロ+言語で検索すれば大体C++をおすすめされることになるかと思います。

ただトレンドとしてはpython3が初学者や学生に人気なのはteratailやQiitaのタグ上位を見れば一目瞭然です。
あくまでも個人的な推測に過ぎませんが運営側もpython3利用者が増えていることを考慮せざるを得ない状況になっているだろうし対策などもされていることかと思います。

要は慣れの問題でC++でもPythonなどのスクリプト言語にそう大差つけられずにさくっと実装できるもんなんですか?

さくっと実装できるかは人によるとしか言いようがないかと。


最後に、個人的にC++を選んだのは趣味で教プロやるのに解説や動画がC++で情報が多いという理由だけです。
書きやすさなら多分python3のが書きやすいです。

投稿2020/09/02 15:00

mjk

総合スコア303

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renge

2020/09/02 20:14 編集

非常に面白い記事を紹介して頂きありがとうございました。C++ではなくCをいじってみたとき、pythonなら素直に組めたものがCになって色々面倒で時間がかかったんですよね(配列の扱いとか文字列の扱いとか) やはり解説でC++が多いのはpythonを使うにあたっての大きなデメリットですし、最低限読んで理解できるくらいの知識は身につけようかなって思いました。回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問