2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50    

0からの、超初心者C++相談室

1 :デフォルトの名無しさん:2018/11/12(月) 14:55:13.35 ID:Tf74ZWQr.net
何にも知らない0からの出発、超初心者のためのC++相談室

380 :デフォルトの名無しさん:2021/10/10(日) 21:07:18.12 ID:6QW0WSDe.net
>>379

vector<int> a(10);
b = a.at(10);

などと書いた場合にコンパイルエラーになりますが、エラーメッセージがatを使うと表示されるというのが理由です。

381 :デフォルトの名無しさん:2021/10/10(日) 21:08:35.36 ID:6QW0WSDe.net
初心者でないプログラマーでatを使って書いている人は少数派ではないのですか?

382 :デフォルトの名無しさん:2021/10/10(日) 21:31:47.25 ID:zWyM5YPA.net
範囲外にアクセスする可能性があるならat、ちゃんと事前にチェックするなら[]でいいんじゃない?

383 :デフォルトの名無しさん:2021/10/10(日) 22:58:42.68 ID:gnqjARRQ.net
気分によるけどatが好きです

384 :デフォルトの名無しさん:2021/10/10(日) 23:07:44.84 ID:gmqGyDAJ.net
vector配列を指すポインタを使ってる時に[i]で指定する書き方がよく分からないのでat(i)使ってる

385 :デフォルトの名無しさん:2021/10/10(日) 23:14:51.45 ID:U88jNIFg.net
(*ポインタ)[i]

386 :はちみつ餃子 :2021/10/10(日) 23:15:56.24 ID:cCUvKLuJ.net
>>378
これのことだね。
https://atcoder.jp/contests/apg4b/tasks/APG4b_n

例外処理やアサートの説明を省略しているせいでどう使い分けるべきものなのかがよくわからん説明になってる。
C++ はかなり複雑で、 AtCoder のサイトにある雑な説明だけでは細かいところまで理解はできないよ。

C++ の言語仕様の詳細を理解するのに手間取って競技を始められないくらいならそういう風に割り切れという意味で
AtCoder としては at を推してるんであって、言語仕様やプログラマの習慣としてどちらかを推奨してたりはしない。
それぞれに用途がある。

387 :はちみつ餃子 :2021/10/11(月) 00:50:58.08 ID:kxIK5/L+.net
余談だが C++ の言語仕様としては推奨というのはないが非推奨というのはあって
(結果的に同等のよりよい機能を推奨するのと同じことになっている場合はある)
将来の言語仕様の更新で廃止するつもりがあるということを意味する。

388 :デフォルトの名無しさん:2021/10/11(月) 02:00:14.70 ID:xizp5ONl.net
ポインタ->operator[](i)

389 :デフォルトの名無しさん:2021/10/13(水) 01:04:04.91 ID:gvBCET4D.net
Notepad++でcppファイルを選んで実行をすると
Visualstudioが立ち上がるのですが
どうすればNotepadで実行出来るのでしょうか?

390 :ハノン :2021/10/13(水) 02:24:33.63 ID:YMzdF2UZ.net
>>389
コンパネ→既定のプログラム→ファイルの関連付け

設定→アプリ→既定のアプリ→ファイルの種類ごとに
あたりでなんとかならないでしょうか?

391 :デフォルトの名無しさん:2021/10/13(水) 03:03:01.45 ID:gvBCET4D.net
>>390
回答ありがとうございます。
ファイルの関連付けをメモ帳とVisualstudioしか選べなかったです。(後Microsoftストア)
Notepad++は初期設定結構大変な感じなんでしょうか?

https://imgur.com/a/V3jOiV0

392 :ハノン :2021/10/13(水) 19:41:40.64 ID:YMzdF2UZ.net
>>391
たしかに「設定→アプリ→既定のアプリ→ファイルの種類ごとに」
はうまくいかないですね
では、
開きたい拡張子を持ったファイルを右クリック→プログラムから開く→別のプログラムを開く→その他のアプリ→このPCで別のアプリを探す
ではどうですか?

私は win7 メインで、うまいアドバイスができなくてすみません‥‥

393 :デフォルトの名無しさん:2021/10/19(火) 08:20:19.87 ID:7/3R28mC.net
C++でアプリを作る場合って、QTってやつかMFCって奴を勉強すればいいのでしょうか?
C++でWIN32APIを学ぶっていうのはないですか?

394 :デフォルトの名無しさん:2021/10/19(火) 10:04:52.66 ID:emsejTNf.net
ないです

395 :デフォルトの名無しさん:2021/10/19(火) 10:18:17.44 ID:vPA5f3eX.net
あります

396 :デフォルトの名無しさん:2021/10/19(火) 11:51:03.31 ID:90qj1F6l.net
メッセージループによるイベントドリブン型アプリケーション
「ウインドウ」と「メッセージ」というウインドウズの基本概念ぐらいは理解してもいい

397 :デフォルトの名無しさん:2021/10/19(火) 19:00:27.41 ID:C9DkQou5.net
tcl/tk
wxWidgets
DXLib
Unity

398 :ハノン :2021/10/19(火) 20:20:27.92 ID:KyySFZDA.net
>>393
「C++でwin32api」ですか…
そういうのは c で win32api を理解した後、各自が独力で工夫して c++ と win32api とを辻褄あわせするものだと思っていましたが、それはそうと、そういう書籍は過去にありました
たしか leaf というライブラリと WOOL という lisp 処理系が掲載されていた記憶があります

399 :デフォルトの名無しさん:2021/10/19(火) 22:23:42.02 ID:P+gkhAFH.net
MFC は何十年も前だけど、今もあるの?

QT は、Linux で聞くけど、Windows で使うの?

400 :デフォルトの名無しさん:2021/10/20(水) 02:20:42.50 ID:+2OzLQ7p.net
>>399
Qt5Core.dllで検索する色々出てくるから、win/macとマルチのアプリなんかで割と使われてみたいね。
手元だとfusion360とかresolveとかで使われてるっぽい。商用ライセンスあるからかな?

401 :デフォルトの名無しさん:2021/10/20(水) 11:06:18.19 ID:OEiI06HQ.net
5以前は良かったんだがな

402 :はちみつ餃子 :2021/10/20(水) 13:35:36.40 ID:dLyN/sz8.net
>>393
MFC は API の利用をちょっと楽にする薄いラッパーという感じだな。
API のことを忘れて MFC の使い方だけ学べばよいというようなものではない。

>>398
今は C++/WinRT の時代だぞ。

403 :デフォルトの名無しさん:2021/10/20(水) 18:01:15.01 ID:oZqSjSwG.net
>>398-402
WIN32やったことないんですが
C++でアプリを作るときはWin32APIは避けては通れないのですか
ありがとうございます…

404 :デフォルトの名無しさん:2021/10/20(水) 19:03:46.64 ID:CkfuGqw9.net
知っておいた方が良いけど
避ける方法もある

405 :デフォルトの名無しさん:2021/10/20(水) 19:36:43.86 ID:+2OzLQ7p.net
>>403
いや自分で書いてるQtって奴や>397なら違う世界観を満喫できると思う。
2Dゲーム系ならSDL2あたりも。他にもメンテされてるライブラリあるけどSDL2で引けば出て来ると思う。

406 :ハノン :2021/10/20(水) 20:15:37.71 ID:I2cv7mAQ.net
>>402
ええ?

WinRT って .NET の世界のものかとおもっていました

407 :デフォルトの名無しさん:2021/10/20(水) 23:17:39.77 ID:vkb7a42p.net
>>406
C++でも出来るよう

408 :はちみつ餃子 :2021/10/21(木) 00:38:03.74 ID:JAunV20A.net
>>406
WinRT は Windows のモダンな API セットで、特定の言語に結びついたものではない。

409 :デフォルトの名無しさん:2021/11/05(金) 12:47:56.16 ID:dj6lZ6W1.net
無名クラスのメンバ関数の実装を宣言と別にすることって可能ですか

struct {
int func_hoge(int n);
} myClass;

(実装)?

410 :デフォルトの名無しさん:2021/11/07(日) 08:51:29.08 ID:+fO8/EKc.net
std::vecotrのインスタンスを作ったとき、指定した要素数以上のメモリを確保しないようにはできますか??

411 :デフォルトの名無しさん:2021/11/07(日) 11:43:59.55 ID:cdTTDz5e.net
実装依存
普通は出来ない

412 :デフォルトの名無しさん:2021/11/09(火) 14:46:05.51 ID:t/ZCl1K7.net
普通でなく指定したバイト数以上のメモリを確保しようとしたら例外が上がる実装例
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
#define MAX_SIZE 100
template <class T, class Alloc=allocator<T>>
class SizeLimitedAllocator {
public:
typedef T value_type;
T *allocate(size_t n) {
if (n > MAX_SIZE) throw bad_alloc();
return allocator_traits<Alloc>::allocate(allocator_, n);
}
void deallocate(T *p, size_t n) {
allocator_traits<Alloc>::deallocate(allocator_, p, n);
}
private:
Alloc allocator_;
};
int main()
{
vector<char,SizeLimitedAllocator<char>> vec(MAX_SIZE);
try { vec.resize(MAX_SIZE+1); }
catch (bad_alloc& e) { cerr << e.what() << endl; }
return 0;
}

413 :デフォルトの名無しさん:2021/11/25(木) 04:15:10.15 ID:0166A/na.net
void *q = (void*)p;
void *r = reinterpert_cast<void *>(p);
void *s = static_cast<void *>(p);
どっちが良い?

414 :はちみつ餃子 :2021/11/25(木) 04:51:08.49 ID:Mn8CZmYm.net
>>413
static_cast で可能なものなら static_cast を使うのが行儀が良い。
Cスタイルのキャスト記法は適用範囲が広すぎて意図通りではない (危険な) 変換でもコンパイルが通るかもしれんということで
複数のキャストを用意しているので意図にあてまる限りなるべく狭い効果を持つキャストを用いるべき。

415 :デフォルトの名無しさん:2022/02/10(木) 15:34:30.67 ID:Ido/99Jv.net
githubからcshogiというパッケージをインストールしようとしたところ
ビルド中に
src/mate.cpp:110:26: error: template parameter redefines default argument
というエラーが発生しました。
実行コマンドは
CPPFLAGS=-std=c++17 pip install git+https://github.com/TadaoYamaoka/cshogi
としているのですが、あれこれ調べてもう打つ手がなくなりそうです。なにが悪いでしょうか。
macOS12.2付属のclangでビルドしています。(他の人は使っているので、文法などは問題ないはずだと思っています。)

416 :デフォルトの名無しさん:2022/02/10(木) 15:42:07.23 ID:J5PrGMnU.net
そのエラーメッセージで検索すれば?

417 :デフォルトの名無しさん:2022/02/10(木) 15:46:35.62 ID:Ido/99Jv.net
>>416
とっくにやってますわ!と言うところでしたが、stackoverflowでぴったりなのがありました。
https://stackoverflow.com/questions/14197436/c11-template-parameter-redefines-default-argument
gccならよさそうですね。

418 :デフォルトの名無しさん:2022/03/15(火) 20:43:42.96 ID:+mlS0n0o.net
test

419 :デフォルトの名無しさん:2022/03/15(火) 21:05:11.63 ID:q9dCXwxq.net
Borland C++Builder 1が無料ダウンロードできるようですが
Borland C++ Compiler 5.5 freeとは全く別物でしょうか?

420 :デフォルトの名無しさん:2022/03/17(木) 11:44:12.82 ID:Y2OAtTnf.net
1は大昔のを記念に無料DL可にしたやつじゃないかな
最新のやつもCommunity Editionていう無料版があるから、開発に使うならそっち
あとBuilderはVisual Studioのような統合開発環境でコンパイラも含まれる

421 :デフォルトの名無しさん:2022/03/18(金) 12:32:15.10 ID:Fw15ZxLZ.net
ロベール読んでるけど、途中からコードとファイルを端折りすぎてどこに書いてるのか理解出来ない

422 :デフォルトの名無しさん:2022/03/19(土) 14:31:38.38 ID:T81w77OE.net
>>421
その本(サイト?)はあまり読んでないからわからないけど、こういう知識・技術系は複数の本やサイトを利用したほうがいいかも
基本はそのロベールで、曖昧な部分は他のテキストでみたいに
まあ逆でもいいけど

423 :デフォルトの名無しさん:2022/03/21(月) 11:12:55.05 ID:Prmlj1K5.net
分割コンパイルの仕組みちゃんと理解しないまま雰囲気でヘッダインクルードしてるんですけど
cppファイルに#pragma once書かないのってどうしてですか??

424 :デフォルトの名無しさん:2022/03/21(月) 11:22:20.21 ID:S8aTENmp.net
>>423 書いても意味ないから。

425 :デフォルトの名無しさん:2022/03/21(月) 11:45:05.99 ID:TlR/Mg8q.net
>>423
まあ普通一回使ったら足りるからだけど、
cppをincludeしてたら意味があるのかもな

426 :デフォルトの名無しさん:2022/04/07(木) 19:54:53.05 ID:ozPVuLqH.net
cppってインクルード出来たんだ
ヘッダーだけかと思った

427 :デフォルトの名無しさん:2022/04/11(月) 15:54:11.00 ID:LBY7PFnU.net
単にコピペしてくるだけだけだからなんでもいいぞ
ルックアップテーブル計算してテキストにダンプし、ソース中に#include "table.txt" で取り込むのを見たことがある

428 :デフォルトの名無しさん:2022/04/11(月) 19:50:08.66 ID:uaVZR/I2.net
IDEだと、プロジェクトに.cppを含めるとコンパイル対象になるので.inlとかにしておくのが無難

429 :デフォルトの名無しさん:2022/04/30(土) 07:28:15.03 ID:2aZ7UOTr.net
前は中身がcppっぽいのはcppにしてたけど
インクルード前提のファイルはhにするようにした

#define ほにゃらら
#include ファイル名.h
##undef ほにゃらら

インクルードしても単体ソースとしても使えるヤツはcpp

ツールが吐き出したコードやデータでそのままincludeして使えるものは拡張子はそのまま

430 :デフォルトの名無しさん:2022/06/11(土) 20:56:47.72 ID:zBk/MBZO.net
hpp

431 :デフォルトの名無しさん:2022/06/11(土) 21:01:36.29 ID:N4H8T0pQ.net
h と hpp どっちにするかの話じゃなくて

(h or hpp) にするか
(c or cpp) にするか

の話

432 :デフォルトの名無しさん:2022/06/11(土) 21:02:37.04 ID:N4H8T0pQ.net
初心者はトリッキーな使い方はしない方が良いから聞かなかった事にして

433 :デフォルトの名無しさん:2022/06/11(土) 21:20:49.53 ID:kM12Kkyp.net
トリッカーズ。

434 :デフォルトの名無しさん:2022/06/12(日) 10:33:13.76 ID:cPTHwR7Q.net
三角形の秘密はね

435 :デフォルトの名無しさん:2022/06/12(日) 11:16:51.08 ID:v0rlTKHd.net
おなかがすいたら

436 :デフォルトの名無しさん:2022/06/12(日) 19:40:55.19 ID:r44ApDPu.net
ピーナッツ

437 :デフォルトの名無しさん:2022/06/23(木) 10:13:29.99 ID:06mLNX8U.net
なんか、すごい達者さんが並んでますけど、
ここって、
「プログラミング初めたいけど、なんにもわからないので、初めから教えてください。」
というスレです。

438 :デフォルトの名無しさん:2022/06/23(木) 10:52:47.91 ID:M4XLJX6g.net
最初からでも0からでも構わんが
自分で努力しないやつはだめ

439 :デフォルトの名無しさん:2022/06/23(木) 11:07:51.97 ID:XRNmRbRA.net
俺は努力しなくてもできちゃうからなあ

440 :デフォルトの名無しさん:2022/06/23(木) 14:33:26.79 ID:06mLNX8U.net
掛け算の*と、「何ですか?」の*と一緒なんですが、
区別する方法を教えてください。

441 :デフォルトの名無しさん:2022/06/23(木) 19:37:03.84 ID:WbbET00J.net
ポインターの事?

442 :デフォルトの名無しさん:2022/06/23(木) 19:47:14.20 ID:hToQs/iZ.net
は?何ですか?

443 :デフォルトの名無しさん:2022/06/24(金) 10:44:51.77 ID:K2we1Lar.net
オレオレ

444 :デフォルトの名無しさん:2022/06/24(金) 12:54:50.02 ID:fYiV2rYB.net
そうだよオレだよ

445 :デフォルトの名無しさん:2022/07/16(土) 16:13:36.70 ID:2GuJXeRO.net
>>440
掛け算の*は二項演算子
「何ですか?」の*は単項演算子
*の前に項があるかどうかで判断する

446 :デフォルトの名無しさん:2022/07/16(土) 17:44:38.20 ID:WOPsEo4E.net
数字の、xxxと、
数字の、AAAの掛け算は、

xxx*AAAで、いつも迷うんです・・・

447 :デフォルトの名無しさん:2022/07/16(土) 18:00:17.69 ID:QRg/sabr.net
*a+++ ++*b
で迷え

448 :デフォルトの名無しさん:2022/07/16(土) 18:01:53.10 ID:QRg/sabr.net
+*a++*++*b
これも

449 :デフォルトの名無しさん:2022/08/01(月) 07:12:02.16 ID:yd/7YIgU.net
map よりも unordered_map の方が高速ですか?
あと追加順が保障されないのが unordered_map ですか?
map は何順ですか?

450 :デフォルトの名無しさん:2022/08/01(月) 13:52:12 ID:jhXgj6wH.net
おまいは何を言っておるのだ?

451 :はちみつ餃子 :2022/08/01(月) 15:12:11.10 ID:YhL9Bhjt.net
>>449
> map よりも unordered_map の方が高速ですか?

操作によるので一概には言えない。
一般的には unordered_map のほうが有利なことが多いとは言えるけれど。

> 追加順が保障されないのが unordered_map ですか?

map でも unordered_map でも追加した順序は保持されない。
C++ に限らず辞書的なデータ構造では格納順序を保持しないのが普通で、
保証があるのは Ruby の Hash くらいだと思う。
Go や Rust だと辿る順序を乱数でかき乱す実装になっているくらいだし。

> map は何順ですか?

キーの順序。
特に指示しなければデフォルトではキーを std::less で比較した順序。

452 :デフォルトの名無しさん:2022/08/05(金) 04:26:17.70 ID:ECXKpFJi.net
そもそもmapの順序ってなんぞや
そりゃ内部表現としての順序(あるいは非順序という名の実装依存の順序)はあるけど
腹ワタ開腹して弄くり回したら、それはもうmapとは呼べねーよ

453 :デフォルトの名無しさん:2022/08/16(火) 01:02:16.19 ID:pMrCsY/x.net
vector<int*> xの特定の要素を削除したい場合
delete x[1];
してから
x.erase(x.begin()+1);
という手順であってますか?
deleteしないとメモリリークしますよね?

454 :はちみつ餃子 :2022/08/16(火) 01:10:03.51 ID:+o+ePBjP.net
>>453
それでいいよ。
でもスマートポインタを活用するとかの工夫はしたほうがいいね。

455 :デフォルトの名無しさん:2022/08/18(木) 11:36:39.99 ID:p/limWqp.net
そもそも移動が大量に発生するのでそんな設計しない

456 :デフォルトの名無しさん:2022/10/14(金) 20:52:11.42 ID:IQ8pOIWW.net
4ビットだから符号無しなら0~15だろ
コレを-8~7の符号付きにしたいということか?

457 :デフォルトの名無しさん:2022/10/15(土) 16:23:31.27 ID:B8kXjL18.net
普通に下駄履かせれば(引き算)

458 :デフォルトの名無しさん:2023/05/24(水) 23:52:31.95 ID:lCJuR93r.net
いやー今日はめっちゃ勉強したわ
詳しくなった

459 :デフォルトの名無しさん:2023/06/04(日) 09:18:18.28 ID:5jvZ+YKl.net
誘導されて来ますた、
質問なのですがstd::stringに格納された数値文字列を数値にしたい、
しかし数値以外の文字(ただし空白文字は認める)が後ろにくっついていたらエラーにしたい、と言う場合どうす
れば良いの?
ダチャい書き方ならできうるけど人類はいつまでstrtod()や&(str[0])……

460 :はちみつ餃子 :2023/06/04(日) 09:22:50.76 ID:MHoxWKtY.net
>>459
strtod で何が不満なの。
空白かどうかで区別が必要なら空白かどうか確認するしかしょうがないし、
ダサいもくそもないだろ。

461 :デフォルトの名無しさん:2023/06/04(日) 09:28:48.33 ID:5jvZ+YKl.net
>>460
だって&(str[0])とかナマポやし……
文字列型がchar以外になったら(std::basic_string<TCHAR>とか)になることも見越したら
手でテンプレート書かないといけないから牛刀感があるし、
文字列が厳格に数値文字列なのか検査するとかアプリのコードであるあるなので
アプリレベル(高級アセンブラ的でない書き方)の手段が用意されていて然るべきな気がして仕方が無いし、

462 :デフォルトの名無しさん:2023/06/04(日) 09:30:18.23 ID:5jvZ+YKl.net
無いというなら仕方が無いが、漏れはちょう初心者ですら……

463 :はちみつ餃子 :2023/06/04(日) 09:37:21.42 ID:MHoxWKtY.net
>>461
std::stod は std::string と std::wstring に対応してるよ。

464 :デフォルトの名無しさん:2023/06/04(日) 09:39:47.38 ID:5jvZ+YKl.net
>>463
std::stod()は数値への変換が行われなかったとき例外をスローするが
後ろに余計なものが付いていたらスルーするんじゃ……
なお試したことはありま栓、

465 :はちみつ餃子 :2023/06/04(日) 09:52:59.20 ID:MHoxWKtY.net
>>464
???
それで何か困ることがあるという話なの?
要件が不明瞭でよくわからん。

466 :デフォルトの名無しさん:2023/06/04(日) 09:55:13.77 ID:5jvZ+YKl.net
実は正規表現でも使えば何とかなる……
のか……
std::regex re("^\s*([\d.]+)\s*$");
std::smatch m;
if (std::regex_match(str, m, re)) {
 return m[1].str().strtod();
} else {
 エラー
}


 

467 :デフォルトの名無しさん:2023/06/04(日) 09:56:15.54 ID:5jvZ+YKl.net
>>465
仕様は最初に提示stkr、
123.456E+8 : OK
123.456E+8a : NG

468 :はちみつ餃子 :2023/06/04(日) 10:00:50.19 ID:MHoxWKtY.net
>>467
続くものが何であるかは自分で確認してエラーにするという話をしてると思ったんやが。

469 :デフォルトの名無しさん:2023/06/04(日) 10:05:01.33 ID:5jvZ+YKl.net
>>468
>続くものが何であるかは自分で確認してエラーにする
・できればライブラリでやってホスイ
・自分で書くとしてもナマポ(&(str[0]))は避けたい(>>461
・std::string部分が他の文字列型に変わっても大丈夫なサポートがあるならそれに乗っかりたい手でテンプレートを書きたくない(>>461

できるかできないかで言えば、std::stringについてはダチャくあっても実現できてはいるので
C++でちょう簡潔に書ける手段が実はあるのではないか、ありませんか、というのが質問の意図

470 :はちみつ餃子 :2023/06/04(日) 10:13:13.65 ID:MHoxWKtY.net
>>469
続くものの種類で判断するというピンポイントな要求にマッチするものはさすがに標準にあるわけない。
それを除けば std::stod が十分に要求を満たしているように見える。

471 :デフォルトの名無しさん:2023/06/04(日) 11:40:09.61 ID:bxWaSYac.net
単位でも確認したいの?
だったらstd::ends_withとかstd::rfindとstd::substrで数字の後ろ切り出すとかでチェックしてからstd::stodでよくね
チェックは自分の要件だから自分で書け標準ライブラリはお前のお母さんではない

472 :デフォルトの名無しさん:2023/06/04(日) 11:51:26.73 ID:xmEQJDCs.net
正規表現でチェックするのが1番自然な気がする

473 :デフォルトの名無しさん:2023/06/04(日) 22:03:06.86 ID:5jvZ+YKl.net
>>471
> 単位でも確認したいの?
> だったらstd::ends_withとかstd::rfindとstd::substrで数字の後ろ切り出すとかでチェックしてからstd::stodでよくね
std::stringに格納された数値文字列を数値にしたい、
しかし数値以外の文字(ただし空白文字は認める)が後ろにくっついていたらエラーにしたい(>>459

> チェックは自分の要件だから自分で書け標準ライブラリはお前のお母さんではない
チェックのためには(例えばstd::stodが)どこまで読んだのかの情報が要る
std::stodの裏側では文字列を数値解釈する枯れたコードが動いているわけで、
そいつにどこまで読んだのか、ただ1個の整数データを聞けさえすれば良い。
これはそれほど無茶な話ではないはずで実際strtod()ではできるから
どっちかというtライブラリにちょっち不備があるのでは案件であってお母さん案件ではない。

474 :デフォルトの名無しさん:2023/06/04(日) 22:20:35.13 ID:5jvZ+YKl.net
>>472
上に書いた通り(例えば)std::stodがどこまで読んだのかだけイブラリが返してくれさえしたら解決するのじゃ
正規表現は意味的には合目的的な手段やが、普通の正規表現エンジンの実装なら正規表現オブジェクトを作った際に
FSMを(表形式か何かで)生成する処理が中で動くので、そんなに軽い処理ではないからやっぱ牛刀感みある…

いったん作ったらマッチングは表駆動でやれるので速いことが気体できるのではないか、という香具師が居るかもしれないが、
実はstd::stod()に最大限仕事させたい(正規表現の側で数値文字列の書式についてわざわざ指定したっくない
場合は>>496の正規表現は正しくは "^\\s*(.*?)\s*$"にせねばならないからマッチング時にバックトラックが発生して遅い可能性がある
これもちょっちイヤソな理由

繰り返しになるが(例えば)std::stodがどこまで読んだのかだけイブラリが返してくれさえしたらこんな考慮は不要で完全に円満に解決するのじゃ……

475 :デフォルトの名無しさん:2023/06/04(日) 22:30:29.50 ID:bxWaSYac.net
>>473
そんな長文ギャンギャン書きなぐってる暇があればstodの仕様くらい調べろよ
ちゃんとお前の欲しがってる物を返してくれるよ

476 :デフォルトの名無しさん:2023/06/05(月) 00:32:44.63 ID:8dockxGx.net
便乗質問していいですか
某所で似たような問題があったのだけど、付加条件として、数値がINT_MAXを超える場合は
INT_MAX、INT_MINを下回る場合はINT_MINを返す、がありました
stodを使う場合(stoll等でもいいですが)、これってどうやって処理すればいいですかね

477 :デフォルトの名無しさん:2023/06/05(月) 00:38:04.95 ID:8dockxGx.net
念の為「数値が」というのは元の文字列での、です。たとえば "1000000000000"みたいな
可能性としてはLONG_LONG_MAXを超えている場合もありますね

478 :デフォルトの名無しさん:2023/06/05(月) 00:46:19.80 ID:oX+QCkCh.net
stoi系は範囲越えたらstd::out_of_rangeを投げるはずだが

479 :デフォルトの名無しさん:2023/06/05(月) 01:19:48.15 ID:8dockxGx.net
_MAXで超えたか_MINで超えたかってわかりますかね

480 :デフォルトの名無しさん:2023/06/05(月) 01:31:31.21 ID:oX+QCkCh.net
先頭文字が'-'かどうか見れば?

301 KB
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :

read.cgi ver.24052200