[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 11/17 15:19 / Filesize : 258 KB / Number-of Response : 1016
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part119



1 名前:デフォルトの名無しさん [2015/08/31(月) 18:19:04.13 ID:NE3NvROE.net]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part118
peace.2ch.net/test/read.cgi/tech/1435970316/

このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
peace.2ch.net/test/read.cgi/tech/1439849418/

次期規格C++1zはこちら
C++14/C++1z 20
peace.2ch.net/test/read.cgi/tech/1410382924/

■長いソースを貼るときはここへ。■
 codepad.org/
 ideone.com/

968 名前:デフォルトの名無しさん [2015/10/15(木) 20:59:33.37 ID:kRNzdeWM.net]
そこでHaskellですよ。

969 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 21:31:42.27 ID:Pl/e/d+4.net]
Javaの課題を写したんなら当然だがc++らしくないな
いっそ元の問題を晒してみたら?
だれかかっこいいc++を書きてくれるかもよ

970 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:21:39.39 ID:eGvButUC.net]
>>956
IOは副作用がある (キリッ

971 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 22:39:21.45 ID:4rmzgbky.net]
>>958
そこでモナドですよ(キリッ

972 名前:デフォルトの名無しさん mailto:sage [2015/10/15(木) 23:43:57.69 ID:KCAkXS7a.net]
っ ::fscanf

973 名前:デフォルトの名無しさん mailto:sage [2015/10/16(金) 00:21:52.64 ID:yFhNulgB.net]
std::fscanfでなく::fscanfを薦める奴に
ロクな奴はいない

974 名前:デフォルトの名無しさん [2015/10/16(金) 01:22:34.18 ID:MCA6CYcJ.net]
extern "C" int fscanf(FILE*, const char* ...);
namespace std {
using ::fscanf;
}

975 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 08:30:18.81 ID:15bBcd+N.net]
可変長引数って
func(const char *s, ...)
func(const char *s ...)
どっちが正しいの?

976 名前:デフォルトの名無しさん [2015/10/17(土) 11:43:59.18 ID:U1ERA7pu.net]
#include <iostream>
using namespace std;
template<typename ...T>
auto f(T...x)



977 名前:{
for(int i:x...)
cout<<i<<endl;
};
int main()
{
f(1,2,3);
return 0;
}

昔こういうことが出来たような気がするんですが
どうやるのか忘れました
教えてください
[]
[ここ壊れてます]

978 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 12:19:44.07 ID:e8xa7PiS.net]
>>963
どちらも正しい

979 名前:デフォルトの名無しさん mailto:sage [2015/10/17(土) 12:28:14.71 ID:e8xa7PiS.net]
>>964
for (int i: {x...})
initializer_listを構築してそれをイテレートする

980 名前:デフォルトの名無しさん [2015/10/17(土) 12:50:24.84 ID:U1ERA7pu.net]
ありがとうございます

981 名前:デフォルトの名無しさん [2015/10/20(火) 18:25:41.85 ID:3vGCFixJ.net]
ファイルから指定文字列を検索したい。以下のコードだとsearchが実行時にエラーExpression: istreambuf_iterator is not dereferencable
ifstream f("Text.txt");
string s("is");

istreambuf_iterator<char> eof;
eof == search(
istreambuf_iterator<char>(f.rdbuf()),
//f.rdbuf(),
eof,
s.begin(),
s.end())
);

VS2013です
どうすればいいですか

982 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 20:46:00.53 ID:8yDPqMwa.net]
cpprefjp.github.io/reference/iterator/istreambuf_iterator.html
-------引用開始-------
istreambuf_iteratorは、operator++()でイテレータを進めることにより、ストリームバッファのsbumpc()メンバ関数でストリームからデータを読み込む入力イテレータである。
ストリームからのsgetc()メンバ関数による読み取りがTraits::eof()を返した場合に、イテレータはendイテレータと等しくなる。
-------引用終わり-------

って事で、1文字ずつしか読み込まないのでは?

983 名前:デフォルトの名無しさん [2015/10/20(火) 21:44:27.08 ID:RWFAio1T.net]
eofに代入してないね
等値比較して結果を捨ててる

984 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 21:51:20.77 ID:wM4Y4a1V.net]
>>968
案1
ファイルの内容を全部stringに読み込んでfindする

案2
ファイルの内容を全部stringに読み込んでregexする

案3
外部コマンドとしてgrepとかawkとかsedをインストールしておいてc++から起動する


お好きな方法でどうぞ

985 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 22:01:04.78 ID:82Xf4s6u.net]
std::searchはForward Iteratorを要求するから
Input Iteratorのistreambuf_iteratorを渡してもだめだわさ

std::findならInput Iteratorでいいから一文字目だけをfindで見つけて
二文字目以降は別にチェックするとか

986 名前:968 [2015/10/20(火) 23:37:01.59 ID:3vGCFixJ.net]
ありがとう
試行錯誤してみるよ



987 名前:デフォルトの名無しさん mailto:sage [2015/10/20(火) 23:46:27.98 ID:Kav8lZYy.net]
>>973
一番簡単なのはstd::stringクラスのfindで
一番応用が利くのはstd::regex系を使いこなすこと
だと思うな

988 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 00:48:57.67 ID:k2x/6pgE.net]
#include <iostream>
#include <fstream>
#include <iterator>
#include <cstdlib>

int main(int argc, char** argv) {

std::ifstream ifs("src/main.cpp");
std::istream_iterator<char> is(ifs);
std::istreambuf_iterator<char> ibf(i
fs);
std::istreambuf_iterator<char> ibf_e
of;

std::string istr(ibf,ibf_eof);
std::cout << istr.find("std");

return EXIT_SUCCESS;
}

989 名前:デフォルトの名無しさん mailto:sage [2015/10/21(水) 01:47:07.42 ID:k2x/6pgE.net]
あ、すまん。std::istream_iterator<char> is(ifs); この行不要な
それとcoutの最後にはstd::endlつけてやってくれ

990 名前:デフォルトの名無しさん [2015/10/22(木) 13:25:09.22 ID:3HJoxiXv.net]
ベクトルのコピーで検索すると
ベクトル同士をコピー代入演算子でコピーするのが一番簡単なきがするのですが
違うやり方ばかり出てくるのはなぜですか?
これがまちがっているということですか?

991 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 13:34:38.59 ID:TivbSMZT.net]
まちがってないで

992 名前:デフォルトの名無しさん [2015/10/22(木) 13:47:47.59 ID:3HJoxiXv.net]
ありがとうございます

993 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 13:55:49.77 ID:CPFSlH5N.net]
違うやり方ってのはstd::vector::assignでbeginからendまでコピーとか?
それのメリットはvector以外の型からもコピーできることかね

994 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 15:52:01.07 ID:wxGQnodN.net]
>>977
単純なコピーの需要が少ないのでは?
単純コピーなら参照でも十分だし

コピーするのは何かを変更したいからワザワザコピーしてを作るわけで
変更するならコピーするタイミングでやるのが簡単だからとか??

あと、要素に参照とかポインタが含まれている場合
シャローコピーになっちゃうわけで参照先の管理が面倒くさくなっちゃう
ディープコピー作るなら一工夫必要だしね

995 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 16:46:09.18 ID:UnQTPRBv.net]
vectorの便乗質問ですが、reserveされてしまった余分な容量を削除する方法としてswap技法
std::vector<T>(x).swap(x)
がありますが、これは一時オブジェクトは全く作成されないのですか?
無名オブジェクトとはいえコンストラクタを呼んでいるわけですから、作成されてるような気がするのですが

996 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 17:44:22.04 ID:TivbSMZT.net]
されてるよ



997 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:39:56.40 ID:UnQTPRBv.net]
>>983
ありがとうございます。やはり作成されるのですね

vectorの容量をシュリンクする効率的な方法としてswap技法を紹介してる人を目にしますが、
コードはシンプルになるものの処理効率が上がるわけではないですよね

998 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:43:29.83 ID:TivbSMZT.net]
>>984
swap技法以外に、方法なくない?

999 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:49:05.63 ID:+o7cqPdB.net]
>>981 は質問の意図をまったく把握してないから無視していいと思う

>>984
複雑で効率的な方法示してみなよ。無いから。

1000 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:53:09.88 ID:UZ6K9ouN.net]
自作のベクタークラスを作る
サイズを縮小する場合はreallocを使う

1001 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:56:31.41 ID:IiO/at8e.net]
shrink_to_fit()

1002 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 18:59:03.48 ID:E1Ocrnf5.net]
最初から必要なサイズを確保すればいい。

1003 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 20:19:27.23 ID:gQOdFLsP.net]
春よこい

1004 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 21:33:39.08 ID:OXupIzBk.net]
次スレ

C++相談室 part120
peace.2ch.net/test/read.cgi/tech/1445516998/

1005 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 21:55:12.08 ID:kinLxVE3.net]
>>989
必要なサイズがわかってるなら単なる配列でよくね?

1006 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 22:15:13.77 ID:TKCRaEBU.net]
>>992
だったら君は配列だけ使ってれば?



1007 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 22:43:30.77 ID:kinLxVE3.net]
>>993
必要なサイズがわかってるなら、そうしてますが何か?

1008 名前:デフォルトの名無しさん [2015/10/22(木) 23:19:22.19 ID:OwqJeF9X.net]
必要なサイズがわかっててもvectorなドアホがいたw

1009 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:21:34.94 ID:plnHfgiP.net]
ポインタでも参照でもない変数って
仮想関数呼んでも呼ばれる関数が静的に決まるよね
このときもvtable経由で呼ばれる?(仮想関数の呼び出しオーバーヘッドがある?)
それともオーバーヘッド0で呼ばれる?
それとも未定義? 最適化次第?

1010 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:21:45.47 ID:4GjtJ8Lk.net]
「わかる」タイミングの問題だ

1011 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:22:03.08 ID:l1df8Qjo.net]
vectorって配列に比べてそんなにオーバーヘッドあるか?

1012 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:24:06.05 ID:Y4jcRaLX.net]
スタック容量を減らすならarray < vector

1013 名前:デフォルトの名無しさん mailto:sage [2015/10/22(木) 23:33:55.59 ID:rvBOfPQs.net]
>>995
それをドアホというお前さんこそドアホである可能性

1014 名前:1001 [Over 1000 Thread.net]
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

1015 名前:過去ログ ★ [[過去ログ]]
■ このスレッドは過去ログ倉庫に格納されています






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<258KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef