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

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

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

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

Q&A

2回答

6478閲覧

なぜC++にはsplitがないの?

32432

総合スコア17

C++

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

4グッド

0クリップ

投稿2016/09/22 20:01

なぜ?なぜ?なぜ?なぜ?なぜ?なぜ?なぜ?なぜ?なぜ?なぜ?なぜ?なぜ?

Magkinh, Chironian, yohhoy, search_search👍を押しています

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

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

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

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

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

Chironian

2016/09/23 01:43

自分で再実装するのもなんか虚しいけど、下手にライブラリを使ってライセンスに悩みたくないし、標準ライブラリに欲しい機能ですよね。何故無いのか解ったので有り難い質問でした。
退会済みユーザー

退会済みユーザー

2016/09/23 07:33

何というか、本文もう少しまともに書いてはどうでしょうか。と思いました。 質問自体は悪くないと思うのですが…
guest

回答2

0

同じ疑問を持った人がstackoverflowで質問しており、その回答が参考になると思います。
c++ - Why doesn't std::string contain a split() method? - Stack Overflow

まだ回答の英文をちゃんと読んでませんが、std::split()は既に提案されています。これまでは、STLのデザインの原則に従ったシンプルな実装ができない(どう、実装すべきかブレがある?)という理由で、STLに入れるのはよろしくないという判断がされ、標準に入れることは見送られきたようです。そこで、現在の提案では、C++17から入るらしいRangeを使用して、そこら辺は解決しようとしているようです。もしかしたら、C++17で採用されるかも知れません(ここら辺はまだちゃんと調べてないです)。

もし、自分で実装せずに、どうしても今すぐ使いたいというのであればboostのsplitを使うという方法があります。

投稿2016/09/22 22:29

raccy

総合スコア21735

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

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

0

PerlやJavaやJavaScriptにはsplitがあり、文字列の配列を返します。しかし、C/C++では配列を戻り値として返せませんし、メモリ効率や処理速度を考慮すると、文字列の配列を動的に生成するのは得策ではない、と判断されたからではないでしょうか。
PerlやJavaやJavaScriptでは、お手軽に安全にプログラミングできることが売りですが、C/C++では性能が売りです。そういうことで、システムプログラミングの分野ではC/C++に根強い人気があります。
splitに話を戻すと、PerlやJavaやJavaScriptのsplitは配列という新しいインスタンスを生成しますが、このインスタンスがどこからも参照されなくなると、ガベージコレクタが自動的にインスタンスを破棄します。ところが、C/C++にガベージコレクタがなく、プログラマの責任でインスタンスを適切なタイミングと場所で破棄しなければなりません。
STLのvectorクラスを使うと、比較的簡単にsplitを実装できます。しかし、実行時のコストが高い上に、利便性が劇的に向上するわけでもないので、C++版splitを個人的にはあまり使いたいと思いません。
C++にsplitがない理由はそんなところでしょうか。

投稿2016/09/24 04:34

naomi3

総合スコア1105

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問