tamanegiの日記: 備忘録: c++ (string) 9
日記 by
tamanegi
久々にc++を書いてる。全然覚えてなくて泣ける。
const関連のコンパイルエラーが全然分からなくて悩んでしまった。
それはさておき、stringはイテレータをコンストラクタに渡せる。
あまり使わないけどふと必要(ってほどでもないが)になった。
// あまりに無意味なサンプル
std::string::const_iterator beg = str.begin();
std::string::const_iterator end = str.end();
std::string hoge( beg, end );
あと、関係ないけど、
std::map< std::string, std::vector< std::string > >::const_iterator it;
みたいの書いてたらとあるヒトに怒られた。タイプ量が多いのが許せないらしい。using namespace stdして、さらにtypedefもするべきだと。じゃあ自分で書け、と言ったら逃げた。うぜえ。クエリ用の関数内部でちょっと使うだけのものにtypedefとかしたくないよ。using namespaceは何となく趣味じゃない。他人が使うぶんには全く気にならないけど、なんとなく自分では使わない。
# そして花粉症がつらい。窓を開けると死ねる。開けないと暑い。結局死ぬ。
using namespace (スコア:1)
私もusing namespaceはあまり好きではないです。
std::を省略しない(using namespaceしない)コーディング規約を採用しているライブラリもありますし。
しかしまあ、std名前空間の識別子は準予約語と割り切ってusing namespaceします。
using namespaceしないけどtypedefする派 (スコア:1)
> std::map >::const_iterator it;
これは、 「std::map >」の部分は複数箇所に登場するでしょうし、データ型はその変数の本質ではないでしょうから、typedefにしますね。
もしstd::multimapに変えたくなったとしても、typdefを変えるだけですみますし。
#mapの場合はあまり多いないですけど、std::list で作ったものをあとでstd::vectorに変えたりとかその逆はたまにあります。
そういう融通がきく(データ型に依存しないようメソッドが用意されてる)ところがSTLのいいところだと思います。
Re:using namespaceしないけどtypedefする派 (スコア:1)
しまった、HTML OK!でコメントしたものだから、崩れてしまってました。
---
> std::map< std::string, std::vector< std::string > >::const_iterator it;
これは、 「std::map< std::string, std::vector< std::string > >」の部分は複数箇所に登場するでしょうし、データ型はその変数の本質ではないでしょうから、typedefにしますね。
---
と書きたかったのでした。
Re:using namespaceしないけどtypedefする派 (スコア:1)
なんとなくそうだと思っていました。
自分も良くやるのでホントに良くわかります。
ちなみに崩れていても肝心な所は大体残っていたので、内容はわかりました。
コメントありがとうございます。
Re:using namespaceしないけどtypedefする派 (スコア:1)
たしかに、データ型に依存する部分が少ないコードを書けることを考えれば、
積極的に typedef するのはむしろメリットなのかも。考えたことなかった。
# multimap は使ったことないや…終わった後で、使えば楽だった、と思ったことあるけど。
# vector, set, list, deque あたりは切り替えたまにあるかも
auto (スコア:0)
使ったらいいんじゃないですか?
Re:auto (スコア:1)
c++11が使えない環境…。orz
Re:auto (スコア:1)
どうもその手のヒトは、autoを使ったら使ったで「型は明示しろ」と言ってきそうな悪寒がします……
「人間が長い型指定をすると間違いを引き起こしやすい」という工学に基づいたうえでタイプ量の削減を主張している人なら、喜んでautoを使ってくれるでしょうが…
Re: (スコア:0)
「間違えたらコンパイラが指摘してくれる」
「コンパイラが自動的に推論してくれるものをなぜ人間様がわざわざ入れてやらなければならんのだ」