C++なら俺に聞け(入門篇)
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/10/15(日) 16:37:23C言語はあってC++が無いのは寂しいので作成
0153151
2006/12/09(土) 22:20:170155デフォルトの名無しさん
2006/12/09(土) 22:33:200156デフォルトの名無しさん
2006/12/09(土) 22:33:27というか、スレタイ見てね(はーと
>>154 ありがとうございます。
問題ない=10回繰り返す=i > 0になったところで、永続ループにならない、
と理解しましたが、OKですね。
月曜日に試してみます。
0157デフォルトの名無しさん
2006/12/09(土) 22:34:590158デフォルトの名無しさん
2006/12/09(土) 22:41:360159デフォルトの名無しさん
2006/12/09(土) 23:00:36>>155
なんかあったっけ?
0160デフォルトの名無しさん
2006/12/09(土) 23:38:530161デフォルトの名無しさん
2006/12/10(日) 16:40:57it = vec.begin();
std::advance(it, n);
は思いついたけどこれって線形時間掛かるんじゃなくて?
0162デフォルトの名無しさん
2006/12/10(日) 16:51:350163デフォルトの名無しさん
2006/12/10(日) 16:52:14ちなみに大抵の処理系でstd::advanceは各イテレータコンセプトについて
適切に実装されているから上のような書き方をする必要はない。
規格でそう決まっていたかはシラネ
0164デフォルトの名無しさん
2006/12/10(日) 17:40:520165デフォルトの名無しさん
2006/12/10(日) 17:46:000166デフォルトの名無しさん
2006/12/10(日) 18:00:52今までforループ使ってた…
勉強になるな
0167デフォルトの名無しさん
2006/12/10(日) 18:14:42>>162-164
�d
0168デフォルトの名無しさん
2006/12/10(日) 18:28:56一つ目の標準出力 (例) cout << "前画面\n"
をしてから、
二つ目の標準出力 (例) cout << "次画面\n"
をしたときに、
------------------------
前画面
次画面
------------------------
ではなく、最初に出力した内容を消去して
------------------------
次画面
------------------------
とする方法を教えていただけますか?
0169デフォルトの名無しさん
2006/12/10(日) 18:36:12標準ではできない。たぶんコンソール操作を行うライブラリを使う必要がある。
0170デフォルトの名無しさん
2006/12/10(日) 18:53:05レスありがとうございます。
少しWEBで検索しました。
>コンソール操作を行うライブラリ
これは、
ttp://www.kumei.ne.jp/c_lang/intro/no_61.htm
みたいなのを自作するということでしょうか?
0171デフォルトの名無しさん
2006/12/10(日) 19:11:25コンソールアプリなら
#include <conio.h>
void clrscr(void);
これ使えねー?
0172デフォルトの名無しさん
2006/12/10(日) 19:33:58>void clrscr(void);
使い方は、
ヘッダをインクルードして、
clrscr();
ですよね?
エラーが出てしまいます。(なんで?)
VS EEでは使えないのでしょうか?
(.\main.cpp(73) : error C3861: 'clrscr': 識別子が見つかりませんでした)
0173デフォルトの名無しさん
2006/12/10(日) 19:47:180174デフォルトの名無しさん
2006/12/10(日) 20:01:53WindowsSDKってのは、Windows Platform SDKのことですか?
これは、
高機能でパフォーマンスに優れた Windows アプリケーションを
作成できます。
と書いてありました。
私はコンソールアプリケーションで作成していますが、いいですか?
ダウンロードは、3つくらい候補があるようですが、
英語で私には難しいかもしれません。
PSDK-amd64.exe 1.3 MB
PSDK-ia64.exe 1.4 MB
PSDK-x86.exe 1.3 MB
0175デフォルトの名無しさん
2006/12/10(日) 20:08:56VS EEって何?
0176デフォルトの名無しさん
2006/12/10(日) 20:12:39>VS EEって何?
Visual C++ 2005 Express Editionです。
0177デフォルトの名無しさん
2006/12/10(日) 20:14:17>VS EEって何?
略している人がいましたが、VSなんて略さないかもしれないですね。
略すならVCかも。
0178デフォルトの名無しさん
2006/12/10(日) 20:19:48変に略さんでくれ
http://msdn2.microsoft.com/ja-jp/library/system.console.clear(VS.80).aspx
これのC++の部分
Console::Clear(); と書いてある
0179デフォルトの名無しさん
2006/12/10(日) 20:20:32PlatformSDKとWindowsSDKは違う。
Platform SDK + NET SDK = Windows SDK
0180デフォルトの名無しさん
2006/12/10(日) 20:21:46ドトネトはスレ違い
0181デフォルトの名無しさん
2006/12/10(日) 20:28:43>PlatformSDKとWindowsSDKは違う。
>Platform SDK + NET SDK = Windows SDK
そうですか。
0182デフォルトの名無しさん
2006/12/10(日) 20:30:58\nの代わりに\rを使うとそういう風になる環境は結構ある。
Windowsのコンソールもそうなっているはず。
0183デフォルトの名無しさん
2006/12/10(日) 20:43:25>\nの代わりに\rを使うとそういう風になる環境は結構ある。
これはその行の先頭へ復帰する、というだけだったと思いますが......
0184デフォルトの名無しさん
2006/12/10(日) 20:49:24いったん画面をクリアしたいんだろ
0185デフォルトの名無しさん
2006/12/10(日) 21:04:220186デフォルトの名無しさん
2006/12/10(日) 21:07:49えっ?
0187デフォルトの名無しさん
2006/12/11(月) 16:29:38例えば、ファイル名を決めていないのに上書き指示を受け取ったときとか。
0188デフォルトの名無しさん
2006/12/11(月) 16:53:25まとめて受け取り処理できる受け皿があるなら、普通に例外投げれば。
上記の例は例外対象じゃないだろ。
設計エラーな気すらする。
0189デフォルトの名無しさん
2006/12/11(月) 16:58:35名無しの場合も例外でもいいんじゃないかという気もする。
Windows でメニューに上書きコマンドを持つソフトなら、
メニューアイテムをグレイにしなきゃならんから事前にチェックする
ことになると思うけど。
0190デフォルトの名無しさん
2006/12/11(月) 17:03:26デタラメにハッシュとかで名前作ってみたらたまたま既に居て書込み禁止だったよとか、そんな状況?
0191デフォルトの名無しさん
2006/12/12(火) 03:00:240192デフォルトの名無しさん
2006/12/12(火) 18:39:09ostringsteam ret;
ret << "****************";
って感じで、文字列ストリームを宣言して、
テキストファイルを読み込んで、
内容を編集し、
文字列ストリームに出力します。
プログラムの最後で、
ofstream fout
と生成した出力オブジェクトfoutに
fout << ret.str();
という風に出力しているんですが、
なぜかある一定サイズ(28行くらい)を超えると、
ダイアログが出て
『問題が発生したため、****.exeを終了します。
ご不便をおかけして申し訳ありません』
と言われます。なぜでしょう?
0193デフォルトの名無しさん
2006/12/12(火) 19:01:09>なぜでしょう?
バグでしょう。
0194デフォルトの名無しさん
2006/12/12(火) 19:01:400195デフォルトの名無しさん
2006/12/16(土) 10:39:27同じくCのgetchに似ている関数ってありますか?
#include <iostream>
using namespace std;
int main()
{
int ich;
while( (ich = cin.get) != EOF ){
cout.put(ich);
}
}
0196デフォルトの名無しさん
2006/12/16(土) 11:05:57基本的にC++の入出力はCのそれと同じ機能を持っている。
ちょうどgetchar/(f)getcはstd::istream::getに対応している。
しかしgetchは標準でないので、C++に対応するものはない。
0197デフォルトの名無しさん
2006/12/16(土) 11:14:05回答感謝です。
そうですか。
わかりました。
0198デフォルトの名無しさん
2006/12/16(土) 14:18:46どうすればいいのでしょうか・・・・?
****=ファイル名
0199デフォルトの名無しさん
2006/12/16(土) 17:17:56日本語でどうぞ。
0200デフォルトの名無しさん
2006/12/17(日) 06:58:47ていうことは、
****
はstringですよね?
stringにファイル名を入れてそのファイルをreadするなら
○-----○-----○-----○-----○-----○-----○-----○-----
string ----- = "パス名"; ← ----は文字列 (末尾に、"\\")
---- += "ファイル名"
filein.open((----.c_str()), ios::in);
○-----○-----○-----○-----○-----○-----○-----○-----
でだめですか?
0201デフォルトの名無しさん
2006/12/17(日) 08:18:520202デフォルトの名無しさん
2006/12/17(日) 10:43:590203デフォルトの名無しさん
2006/12/17(日) 17:07:09どうしても2.35e+06と表示されるんですが、どうしたらいいでしょうか?
0204デフォルトの名無しさん
2006/12/17(日) 19:16:58Visual C++でC++を書いていたのですが、
どこかのショートカットキーを押してしまい、
スペースが・で表示されたり、
Tabが→(矢印)で表示されるようになってしまいました。
どうすれば元に戻せますか?
0205デフォルトの名無しさん
2006/12/17(日) 19:23:00(VCのエディタの設定が変わったのでしょうかね?[ツール]-[オプション]とか適当にいじってもダメですか)
私は設定にはあまり詳しいわけでないのでお答えできませんが、
VCのシリーズによって、微妙に設定方法って違うかもしれませんね。
(基本的には同じだと思いますが)
0206デフォルトの名無しさん
2006/12/17(日) 20:06:57double d = 2350000.;
std::cout << std::ios::fixed << d << std::endl;
0207デフォルトの名無しさん
2006/12/17(日) 20:11:20204です。
205さん、アドバイスありがとうございます。
[ツール]-[オプション]をいじってみたのですが、
今のところ元に戻りません…
0208デフォルトの名無しさん
2006/12/17(日) 20:23:25このへん
http://www.geocities.jp/cbc_vbnet/vc/console.html
04.マニピュレータ
0209デフォルトの名無しさん
2006/12/17(日) 22:37:19どうもありがとうございました。
問題は解決されました・・
0210デフォルトの名無しさん
2006/12/18(月) 00:02:30元にしたオブジェクトが死んだら使えなくなるの?
関数アダプタって、どう言う仕組みで実装できてるのだ?
0211デフォルトの名無しさん
2006/12/18(月) 00:06:56行列の固有値と固有ベクトルを求めるため、
ttp://www.neuro.sfc.keio.ac.jp/~masato/source/
このサイトにあるヘッダーファイルとリソースファイルを組み込み、マニュアルに示されているとおり、
#include <stdio.h>
#include "matrix.h"
void main(void)
{
Matrix A(2, 2), X;
Vector lamda;
A[0][0] = 3.0; A[0][1] = 2.2; // 行列 A 3.0 1.2
A[1][0] = 1.2; A[1][1] = 2.0; // 1.2 2.0
X = A.eigen(&lamda);
printf("\neigen value = ");
lamda.print();
printf("\neigen vector =\n");
X.print();
}
として、コンパイルしたところ、
1番目の引数を 'Vector *' から'Vector &'に変換できません。(新しい機能; ヘルプを参照)
というエラーが出ます。どうようにすればよいのかぜひ教えてください。
0212204
2006/12/18(月) 00:19:44(ctrl+R) + (ctrl+W) で元に戻りました。
205さん、ありがとうございました。
0213デフォルトの名無しさん
2006/12/18(月) 00:29:10ざっと見た感じ
X = A.eigen(&lamda)ではなくて
X = A.eigen(lamda);じゃないか?
(実際に確かめてないのであしからず)
0214デフォルトの名無しさん
2006/12/18(月) 00:34:59すでに試してみました。固有値は0が二つ、固有ベクトルは[0.5914,-0.8964]が二つ返され、うまくいきませんでした、
0215デフォルトの名無しさん
2006/12/18(月) 00:44:040216デフォルトの名無しさん
2006/12/18(月) 00:47:11#include <clocale>
setlocale(LC_CTYPE, "");
0217デフォルトの名無しさん
2006/12/18(月) 00:48:09一から全部教えてください
m(_ _)m
0218デフォルトの名無しさん
2006/12/18(月) 00:49:05読み込もうとするとどうなるの?
0219デフォルトの名無しさん
2006/12/18(月) 01:00:38すごい!解決したかもです。ありがとうございます
>>218
以下のチェックで必ず引っかかってましたが216さんので引っかからなくなりました
ifstream ifs(argv[1]);
if(!ifs)
return 1;
0220デフォルトの名無しさん
2006/12/18(月) 01:41:41そのままファイルに日本語書き込めるか?
ライブラリがバグッててどうしようもなかったと思うんだが。
0221デフォルトの名無しさん
2006/12/18(月) 01:49:29バグリました
引数の日本語は消え、変数内に日本語を使用するとそこで処理が止まりアプリが落ちる感じで…
振り出しに戻ったところでございます。よき方法があればご教授をTT
0222デフォルトの名無しさん
2006/12/18(月) 11:22:14SP1 が出てるから、試してみるといいかもしれない。
むしろ、試してみて報告たのむ。
0223デフォルトの名無しさん
2006/12/18(月) 17:13:39String str[] = {"aa", "bbb", "ccccc"};
のような配列の要素数を得るにはどうしたらいいのでしょうか。
0224デフォルトの名無しさん
2006/12/18(月) 17:23:020225デフォルトの名無しさん
2006/12/18(月) 17:24:04今は2.95.3を併用してctype.oでごまかしながら使ってます。
0226デフォルトの名無しさん
2006/12/18(月) 17:25:53<boost/range/size.hpp>をインクルードしてboost::size(str)という手もある。
0227デフォルトの名無しさん
2006/12/18(月) 18:00:06ありがとうございます。
>>224の方法で出来たのですが、それを少し変えて
const string a[] = {"aa", "bbb", "ccccc"};を
int function(const string str[]) const {
return (int)sizeof(str)/sizeof(str[0]);
}
のような関数でfunction(a);として要素数を出すようにしたら、
戻り値が0になってしまうのですが、なんででしょうか。
0228デフォルトの名無しさん
2006/12/18(月) 18:12:53引数として得た配列のサイズを得ることはできません(固定サイズの場合を除く)。
もし問題がなければ、std::vector などを使うのが良いと思います。
0229デフォルトの名無しさん
2006/12/18(月) 18:13:29std::size_t array_size(T (&)[N])
{
return N;
}
0230デフォルトの名無しさん
2006/12/18(月) 18:14:17templateで出来るだろ。
0231デフォルトの名無しさん
2006/12/18(月) 22:14:53仮引数でのTの配列型は、Tへのポインタ型へ変換される規則。
>>228
boost::sizeは、普通の引数として配列の引数を受け取るが。
(配列に対する部分特殊化は、正に229のようなことをやっている)
0232デフォルトの名無しさん
2006/12/18(月) 23:13:41function() {
const string a[] = {"aa", "bbb", "ccccc"};
array_size(a);
}
のようにした場合、上手くいくのですが、下のようにすると上手くいきません。
function2() {
const string a[] = {"aa", "bbb", "ccccc"};
function1();
}
function1(const string b[]) {
array_size(b);
}
VisualStudio .NET 2003環境で以下のようなエラーが出てしまいます。
「'size_t array_size(T (&)[N])' : 'T1 (&)[N] 用のテンプレート引数を
'const std::string []' から減少できませんでした。」
どこがまちがってるんでしょうか。
0233デフォルトの名無しさん
2006/12/18(月) 23:14:44windows.hがインクルードできません。
Cの知識はあるのですが、C++の知識はないです。
何が原因でしょう?
0234デフォルトの名無しさん
2006/12/18(月) 23:15:06function2() {
const string a[] = {"aa", "bbb", "ccccc"};
function1(a); // ←
}
0235233
2006/12/18(月) 23:23:270236デフォルトの名無しさん
2006/12/18(月) 23:25:20226/229の方法は、配列にしか使えず、ポインタには使えない。
配列型は引数に取れないが(>231)、配列への参照型は引数に取れる(配列へのポインタ型も可)。
というわけで次のようにすればいい。
template <typename Range>
void function1(Range& b) {
array_size(b);
}
0237デフォルトの名無しさん
2006/12/18(月) 23:51:46ありがとうございます。その方法で出来ました。
C++にはtemplateという便利なものがせっかくあるのに
使いこなせないというのはもったいないので、これから勉強し直そうと思います。
0238デフォルトの名無しさん
2006/12/19(火) 08:17:38分かりやすく教えてください、エロい人。
0239デフォルトの名無しさん
2006/12/19(火) 09:54:22判らない人は使わなくて宜しい。
ファイルストリーム系のfseek()使えば?
0240デフォルトの名無しさん
2006/12/19(火) 14:10:11六個の整数を配列に記憶して配列の中から最大値と最小値を出せって問題なのですが
これは配列に入っている数字をif文で総当りの式書かないとできないのでしょうか?
配列使って応用が効きそうだなとは思うのですがなかなかその先に考えがいけません。
何かヒントなどいただけないでしょうか?
0241デフォルトの名無しさん
2006/12/19(火) 14:16:430242デフォルトの名無しさん
2006/12/19(火) 14:17:24「ソート」とか、「ソート 配列」でググってみろ
0243デフォルトの名無しさん
2006/12/19(火) 14:18:51ヒントというか・・・
気に入ったTVが一番安く買える値段を探すときに、あなたならどうしますか?
探している途中、今まで見つけた中でいちばん安い値段をメモしておいたり・・・
0244デフォルトの名無しさん
2006/12/19(火) 15:09:01>243
すいません追記で
使っていいのはif文とfor文だけです。
0245デフォルトの名無しさん
2006/12/19(火) 15:14:45>>242-243に追記と言ってどうするw
ヒントをくれてるんだから自分でやれよ
ここは宿題スレではない
0246デフォルトの名無しさん
2006/12/19(火) 15:23:30はぁ?w
元からできるよw
ひとつだけ言わせてくれソ−ト使わないとこんな問題もできないんですか?wwwwww
入門スレだからどれくらいできるやついるか試しただけ、
だけどこんな初歩の問題もできないなんてwwwww
このスレの価値なし
0247デフォルトの名無しさん
2006/12/19(火) 15:27:06次の質問どうぞ。
0248デフォルトの名無しさん
2006/12/19(火) 16:36:55処理系定義の機能を使う必要がある。よって、環境が明示されて
いなければ答えようがない。
0249デフォルトの名無しさん
2006/12/19(火) 22:57:39どういう方法があるでしょうか。
0250デフォルトの名無しさん
2006/12/19(火) 23:00:550251デフォルトの名無しさん
2006/12/19(火) 23:02:06・他の機械(やプログラム)にデータを渡してソートしてもらう
・ユーザにデータを示してソートしてもらう
・並べ替えを一切せず、低い確率でのみ正常動作するという仕様で我慢してもらう
くらいしか思いつきません・・・
0252デフォルトの名無しさん
2006/12/19(火) 23:51:45■ このスレッドは過去ログ倉庫に格納されています