C++勉強しようと思うんだけど・・・
■ このスレッドは過去ログ倉庫に格納されています
0001初心者
NGNGお勧めなのでしょうか?
初心者の自分ですが、皆様のお知恵をお借りしたいと
思いますので、よろしくお願い致します。<(_ _)>
0232デフォルトの名無しさん
NGNGOOPなんて構造化プログラミング知らない人間に教えても混乱するだけじゃない?
構造化プログラミングも十分理解してない人間にcoutだprintfだって言ったって
わからんよ。
それよりOOPのことは>>220のように�Eで始めて触れても遅くないと思う。
CとC++って勉強する上でシームレスに繋がってないのが大きな欠陥だよなぁ。
その点、PascalからObjectPascalを設計した人はエライと思うよ。
0233デフォルトの名無しさん
NGNGだってCじゃなくてC++をやりたいんでしょ?
煽りではないよ、目を向けて欲しいだけです
0234デフォルトの名無しさん
NGNGなんでCは
#include <stdio.h>
int main()
{
printf("Hello, World!\n");
return 0;
}
ではじまるのか?
と同じだな。
話すと長い。
printfには型安全がない。
基本型の理解やポインタの理解、スタックの理解、書式の理解、標準出力の理解が必要だし、
誤った入力や書式指定を許してしまう。
coutの方が、理解に必要なハードルが少ない。
cout << なにか;
を覚えれば、画面(標準出力)になにかが表示される、と覚えれば済む。
0235デフォルトの名無しさん
NGNG0236デフォルトの名無しさん
NGNG例?
char a = 'U';
printf("%d %d",a);
確かに幾度と無く危険な目に遭わされたw。
0237デフォルトの名無しさん
NGNG「<<」ってなんだ、ビットシフトじゃねーの?って聞かれたらまた面倒なんですけど。
cout.operator<<(なにか);
とでも書かせとくか?
0238デフォルトの名無しさん
NGNG頑張れば、
cout += "hello" += "world" += endl;
とか
cout != "hello" != "world" += endl;
0239デフォルトの名無しさん
NGNG「<<は元々整数に対して使う演算子で、そいつのビットを、右や左にn個シフトしたいときに使うんだよ。
で、シフトって言うのはね...」
と説明すればよくて、混乱しそうになったら
「だけど、整数じゃないオブジェクトに << を使うときはね、 xx を流し込むって意味で
使うんだよ。最初に使った cin とか cout の << がそれだよ」
でわかるんじゃないかねえ。
中級になったら、「ostream系のオブジェクトの operator <<は...」って教えればいいだけ。
printf教えるときに、スタックの状態や、可変長引数の片繰上げや細かい書式、
va_argやva_listの説明なんかしないだろ。
そんなもんだよ。
練習用の曲はね、大抵ね、後から振り返ってみるといろいろ示唆すべきものが含まれているもんなの。
あるていどわかるようになってから、「ああ、あれはああいう意味があったんだ」ってわかればいい訳なの。
英語習うときもね、How do you do?みたいにね、よくあるイディオムから始めりゃあいいの。
0240デフォルトの名無しさん
NGNG基本は>>132、>>220の線で行く。クラス云々は�Eまでお預け。
但しC++らしく入出力はcin、coutを使うべし。
0241デフォルトの名無しさん
NGNG賛成++;
0242デフォルトの名無しさん
NGNGかわいそうに
0243デフォルトの名無しさん
NGNG気にせず問題が出来たら持っておいで。みんなでわいわい添削します。w
0244デフォルトの名無しさん
NGNGAlexandrescuマンセー!!!
0245153
NGNG単純に ofstream output( "prime.txt" ); でOKなんですかね。
#include <iostream>
#include <fstream>
#define MAX 1000
using namespace std;
int main( void )
{
int all[ MAX + 1 ] = { 0 };
int half = MAX / 2;
all[0] = 1;
all[1] = 1;
for ( int x = 2; x < half; ++x ) {
if ( !all[ x ] ) {
for ( int y = 2; x * y <= MAX; ++y ) {
all[ x * y ] = 1;
}
}
}
ofstream output;
output.open( "prime.txt", ios::out );
for ( int j = 0; j <= MAX; ++j ) {
if ( !all[ j ] ) {
cout.width( 4 );
cout << j;
output << j << endl;
}
}
output.close();
return( 0 );
}
0246デフォルトの名無しさん
NGNG今こういうの流行ってるの?
確かに0以外は偽だけどさ・・・使い方間違ってる気がする。
0248デフォルトの名無しさん
NGNGいろいろなポリシーの人がいるから何とも言えないけど、個人的には非推奨。
0249デフォルトの名無しさん
NGNG明示的に「0なら」とやりたいなら、if(all[x] == 0)の方が見やすいしわかりやすい。
if ( !all[ x ] ) の方が確かにソースも数バイト短いし、実行ファイルも数命令短く
なるかもしれないけど、それによって得られるメリットよりも、見難いソースの
デメリットの方が多そう・・・。
あと int all[ MAX + 1 ] = { 0 }; じゃ all[0] 以外は初期化できてないんじゃない?
ちゃんとfor文で回そう!
0250デフォルトの名無しさん
NGNGごめん。
>実行ファイルも数命令短くなるかもしれないけど
どっちも結局CMPじゃないの?
0251デフォルトの名無しさん
NGNGif ( !all[ x ] ) だとJZE?を使ってくるかもしれない。
すまん漏れ汗ンブラあまり知らんです。
0252デフォルトの名無しさん
NGNGそういう風に指定したとき、足りない要素は0として初期化される
ことが保証されてなかったっけ?
いや、もちろんコーディングスタイルとしてはやっちゃマズいだろうけどさ。
0253デフォルトの名無しさん
NGNG少なくとも、VCではどっちも同じ。
cmp 変数,0
jne
ってコードだった。
0254249
NGNGそうだったの?知らなかったスマソ。
でもやっぱり初期化したほうが精神的に落ち着くな・・・
0255デフォルトの名無しさん
NGNG9割は、ソースの1割で浪費される、と言われてる(8割2割って言う人もいる)。
ナントカの法則って名前ついてたかも知れないけど忘れた。
つまりソースの大部分は改良してもプログラムの高速化にほとんど貢献しない。
だからあまり細かい実装法( if(!all[x]) とか )にこだわっても、見にくくなる
ばかりでほとんど早くならない。
それよりは多少効率は悪くても、見やすい、美しいソースを書いて、完成してから
ボトルネックとなる1割の部分(再帰呼び出しされる関数や多重ループの一番内側)
だけに小細工をした方がなにかと良い。
ま、そういうことを頭の片隅に置いておくといいと思うよ。
それにソートプログラムを組めばわかるけど、高速化の真髄はアルゴリズムの改良
にあるってことも重要。
初心者のうちは「美しいソース」を書くようにした方がなにかといいです。
0256デフォルトの名無しさん
NGNG普通に9:1の法則でなかったっけ?
確か実行される頻度が高いホットスポットと呼ばれる部分がソース中に1割ある。
後の9割はたいして実行されない。
ホットスポットを最適化することがプログラムの高速化に繋がるって話だった気が。
0257デフォルトの名無しさん
NGNG配列の初期化(と言うより、値の準備)はループを回すべきだ、と。
bool型の変数を評価するときはどうするべきでしょう?
「if (hoge)」「if (hoge == true)」
今は前者を使っていますけど……。
(その割には「if (p == NULL)」と書いてたり)
0258デフォルトの名無しさん
NGNG0259257
NGNGtrueの時も「==」を使いますか。
0260デフォルトの名無しさん
NGNG真偽値はそのまま使おうぜ。
0262デフォルトの名無しさん
NGNG0263デフォルトの名無しさん
NGNGプログラミングでは80:20の法則で
プログラミング(コンピュータ)以外では
9:1の法則って良く聞くような。
「SFの9割は糞である」みたいに。
0264デフォルトの名無しさん
NGNG0265デフォルトの名無しさん
NGNG0266デフォルトの名無しさん
NGNG0267デフォルトの名無しさん
NGNG0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNG受講者がいないんじゃしょうがないよね。
しょうがないから、赤ペン先生たちで
例外について語り合っとく?
0270デフォルトの名無しさん
NGNG上級編までお預け。
0271デフォルトの名無しさん
NGNG0272デフォルトの名無しさん
NGNG0273153
NGNG>>132 の 5) バブルソート。
色気を出して関数にしてみました。
#include <iostream>
#include <time.h>
#define QTY 100
using namespace std;
void output( int array[], int qty, char mess[] )
{
cout << mess << endl;
for ( int i = 0; i < qty; ++i ) {
cout << array[ i ] << endl;
}
}
void bsort( int array[], int qty )
{
int temp, i, n;
for ( i = qty -1; i > 0; --i ) {
for ( n = qty - 1; n > 0; --n ) {
if ( array[ n ] < array[ n - 1 ] ) {
swap( array[ n - 1 ], array[ n ] );
}
}
}
}
int main( void )
{
int list[ QTY ];
srand( (unsigned)time( NULL ) );
for ( int i = 0; i < QTY; ++i ) {
list[ i ] = rand();
}
output( list, QTY, "ソート前" );
bsort( list, QTY );
output( list, QTY, "ソート後" );
return( 0 );
}
0274デフォルトの名無しさん
NGNG個人的に配列の引数はポインタで受け取ってほしい。特にchar型は。
0275153
NGNG添削お願いします。
#include <iostream>
#include <time.h>
#define QTY 100
using namespace std;
void output( int array[], int qty, char mess[] )
{
cout << mess << endl;
for ( int i = 0; i < qty; ++i ) {
cout << array[ i ] << endl;
}
}
void qsort( int array[], int first, int last )
{
int basis, small, big;
basis = array[ ( first + last ) / 2 ];
small = first;
big = last;
while ( small <= big ) {
for ( ; array[ small ] < basis; ++small ) ;
for ( ; array[ big ] > basis; --big ) ;
if ( small <= big ) {
swap( array[ small ], array[ big ] );
++small;
--big;
}
}
if ( small < last ) {
qsort( array, first, small );
}
if ( big > first ) {
qsort( array, big, last );
}
}
int main( void )
{
int list[ QTY ];
srand( (unsigned)time( NULL ) );
for ( int i = 0; i < QTY; ++i ) {
list[ i ] = rand();
}
output( list, QTY, "ソート前" );
qsort( list, 0, QTY );
output( list, QTY, "ソート後" );
return( 0 );
}
0276デフォルトの名無しさん
NGNGバブルソートってこうだっけ?
いや、基本路線は合ってるし、ソートもできるんだけど。
0278デフォルトの名無しさん
NGNG0279デフォルトの名無しさん
NGNG0280153
NGNG皆さん、>>1さんじゃないのに添削していただいて有り難うございます。
どうも僕は、下手に短く書こうとして読み難くする悪癖アリですね。
気をつけます。
>>276
バブルソートを書き直してみました。どうでしょう?
>>273のだと、ソート済み部位も比較したりと無駄なループをしてますか。
使っていないtempとかありますし…駄目だ<自分
>>277でご指摘の >>174 クイックソートの方はよくわかりません。
クイックソート自体よくわかっていないのかも。
void bsort( int *array, int qty )
{
int i, done;
bool flg = true;
--qty;
done = 0;
while ( flg ) {
flg = false;
for ( i = qty; i > done; --i ) {
if ( array[ i ] < array[ i - 1 ] ) {
swap( array[ i - 1 ], array[ i ] );
flg = true;
}
}
++done;
}
}
0281276
NGNGバブルソートはアルゴリズム的にはOK。
あと、前に変数に2つ以上の意味を持たせるなと
言われなかったかい?
クイックソートの方は
int list[QTY + 1];
list[QTY] = 0;
と修正すれば表面に出てくる。
あと、実際に実行してみたんだけど、ソートされているときもあれば
されてないときもあるみたい。こっちの原因はまだ調べてないけど。
>>274 で言われていることについては個人的には反対。
>>279 ありがと。
0282初心者
NGNG最近、電験の勉強に集中している為にc++の勉強が
はかどっていません。
�Eまで行くのにかなりの期間がいると思いますので
温かく見守って頂けませんでしょうか。<(_ _)>
一日30分はc++をやるようにしてるのですが、
パソコンを立ち上げても参考書とにらめっこして
30分過ぎてしまうという状態なので・・・
0283デフォルトの名無しさん
NGNGあるんだが、定数QTYをある程度大きくして、何回か実行して実行時間を
比べてごらん。
たとえばQTY=10000,QTY=20000,QTY=40000とかで。
まぁこのくらいでも一瞬で終了するかも知れないから、適当にプログラム全体を
何回かループさせて、1回当たりの実行時間を計測してごらん。
で、バブルソートとクイックソートでは、それぞれQTYを倍にすると、実行時間が
何倍くらいになるか調べてみるとクイックソートの有り難さがわかるよ〜。
あと時間計測するときは画面へ描画はさせないこと。つまりoutput関数を呼び出さない。
画面描画させちゃうと、ほとんどのCPUパワーを描画に使いかねない。
0284デフォルトの名無しさん
NGNGパソコン起動せずに参考書読んでな。
それで良いよ。
読破したら、初めてパソコンの電源入れなさい。
0285デフォルトの名無しさん
NGNG今でも読むし、これからも読み続けるんだろうけど。
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNG0288153
NGNGmainでの呼び出しが最高に間違っていました(鬱
void qsort( int *array, int first, int last )
{
int basis, small, big;
small = first;
big = last;
basis = array[ ( first + last ) / 2 ];
while ( 1 ) {
for ( ; array[ small ] < basis; ++small ) ;
for ( ; array[ big ] > basis; --big ) ;
if ( small >= big ) break;
swap( array[ small ], array[ big ] );
++small;
--big;
}
if ( small - 1 > first ) qsort( array, first, small - 1 );
if ( big + 1 < last ) qsort( array, big + 1, last );
}
でmainでの呼び出しを下のように修正。
qsort( list, 0, QTY - 1 );
以上でたぶんOKだと思うのですが、いかがでしょうか?
ただ、上のwhile文を下のように書くと上手くソートできないのですが
僕には違いがわかりません。どうぞどなたか理由を教えてください。
while ( small < big ) {
for ( ; array[ small ] < basis; ++small ) ;
for ( ; array[ big ] > basis; --big ) ;
if ( small < big ) {
swap( array[ small ], array[ big ] );
++small;
--big;
}
}
0289デフォルトの名無しさん
NGNG0290153
NGNGこういうことですか?
for ( ; array[ small ] < basis; ++small ) ;
↓
while ( array[ small ] < basis ) ++small;
0291153
NGNG>>274さん >配列の引数はポインタで受け取ってほしい。特にchar型は。
>>281(276)さん >>>274 で言われていることについては個人的には反対。
どちらでいけば良いのでしょうか?
0292デフォルトの名無しさん
NGNGCは配列そのものを引数で渡すことができないので、すべて
ポインタ渡しだが、精神的に配列で取る人もいる。
自分の好みでいいのでは。
0293デフォルトの名無しさん
NGNG一瞬でスタックの空きが無くなるね。ちょっぴり再勉強。
0294153
NGNG>>132 6) の >>220版やってみました。長いので別のところにうp。
みていただけて更にアドバイスなんかもいただけるとうれしいです。
http://perlnewbold.hoops.jp/cbasket.cpp
先々日買ってきた「憂鬱なプログラマ〜」を片手にやってみましたが
クラスとか初めて書いたのでカナ-リ行き当たりばったりで、
書き方も間違いだらけだと思います。
deleteとかもよくわかんないし…
0295初心者
NGNG理論・電力と一通りやり、あと少しで機械に突入します。
機械に入ると制御問題も出てくるので、よりいっそうc++の知識が
役に立つと思います。
0296276
NGNG#define QTY 10
list[ i ] = rand() % 100;
というように大きな問題は小さくしてからデバッグした方がよいよ。
うまくソートされなかったときの値を使って、
両方のプログラムの動きを追ってみるといいかと。
紙に書くなり、デバッガを使うなり、coutで途中の状態を表示するなりして。
頭の中だけでやろうとしても無理。
そこまでやっても、違いがわからなかったのなら、説明するよ。
0297276
NGNGvoid foo(int array[]) として、
関数内でarray++と書いてもはコンパイルエラーにはならない。
実際にはarrayは配列ではなくポインタ型の変数が正しい。
そのため、正確に表記しましょうというのが前者の考え方。
後者は、引数でアドレスが渡される場合、
配列の先頭アドレスである場合と変数のアドレスである場合とが
あるので、その違いを表記しましょうという考え方。
変数名やコメントで配列であることを表記したりもできるので、
それほどメリットはないです。
一概にはどちらの書き方がよいとはいえないので
>>292 でいわれているように好みでいいかと。
2通りの考え方があることを知って欲しかっただけです。
0298デフォルトの名無しさん
NGNGコードは見てねえけど、がんばれー。
読んで、試して、なんか変だと思ったら、また本を読む。
そのうち、何が巧くないやり方で、なにが巧いやり方なのかわかる
ようになるよ。
仕事と関係ないところで、ガシガシためしてね、
腕を磨きなさいよ。`
0299153
NGNG>>288の違い、わかった気がします。
交換される回数とその後のカウントばかりに気をとられていて、
その前のループによるカウント回数の違いに気づいていませんでした。
上手くいかない方は、最初の呼び出し時の交換後にsmallとbigが同値になると
再帰される範囲に同値の要素が含まれない為、上手くソートできない場合がある。
上手くいく方は、交換後にsmallとbigが同値でもbreak前のループを通るので
同値の要素が再帰される範囲に含まれ、OK。
これであってますか?
0300276
NGNGあってます。
arrayが 3, 4, 2, 5, 6 の場合を考えると楽です。> 他の方
>>294 については、出題者の意図とあっていないと思う。
たぶん、順次表示はいらなく、クラスには表示機能を持たせないと
考えていると思う。
0301153
NGNGこんな感じでしょうか?
getDataとgetTimeを追加してcon_outをなくしました。
http://perlnewbold.hoops.jp/cbasket2.cpp
実は線形リストというのがよく分からず、
検索をかけてそれっぽいものを参考にしたのですが
とりあえず方向としては間違ってなかったんですね。
一応>>132の6)までいったので、>>148に挑戦したいと思っています。
形になったらageっちゃたりしますので、よろしくお願いします。
0302276
NGNG方向は間違っていないです。
別の意味で方向は逆にした方がいいかもしないけど… ま、いいか。
>>220 より
> 但し、線形リスト全体をクラスメソッド"push"と"pop"を持ったクラスとして
わかっているかもしれないけど、暗に「スタック(stack)」と呼ばれるデータ構造を
実現するクラスを作るように言っています。
「スタック」と「逆順」には深い関係があります。
関連するキーワードは「待ち行列」「キュー(queue)」「FIFO」「LIFO」など
あと「メソッド」じゃなく「クラスメソッド」って書いてあるね。
オレも読み落としてたよ。
0303276
NGNGやっぱりこれなしにしてくれ。
0304153
NGNGスタック!全然気がついていませんでした。
popで最後の要素を返せば良かったんですね。
http://perlnewbold.hoops.jp/cbasket3.cpp
そういえばpopは最終要素の「取り出し」ですもんね。
0305153
NGNG>>148 - 7)できましたヨ!どでしょ?
http://perlnewbold.hoops.jp/koch.cpp
http://perlnewbold.hoops.jp/koch.zip(実行ファイル / 17KB)
ウィンドウ作るのだけでメチャメチャ手間かかりました。
あと、曲線の終端がなかなか合ってくれないんです。
適当にいじってたら合った感じなのでソレでヨシとしてます。
ウィンドウできたら、凄いことやった気になれて楽しかったです(^-^
0307276
NGNGTboxがクラスの外に出ては線形リストが外部から隠蔽されたことにはならない。
普通 popの戻りの型はpushの引数と同じ型にする。
while ( pointer->next != NULL ) {
pointer = pointer->next;
}
これはなくてもいいように思うけど。まずいの?
>>305
これに関しては図はみたことあるけど、あまり知らない。
Windowsのプログラミングも少ししか知らないので、
他の方がみてくれた方がいいかも。
だからといってみない訳ではないですけど。
0308153
NGNG>Tboxがクラスの外に出ては線形リストが外部から隠蔽されたことにはならない。
Σ(゚д゚lll)ガーン
>普通 popの戻りの型はpushの引数と同じ型にする。
入れたものと同じ形で取り出すワケですね。
ってことは、intでtimeとdataの両方は返せないから、
入力回は素直にmain側で管理、ですか。
while ( pointer->next != NULL ) { 〜 は要らないですかね。
getDataとか付けてた時のままにしてました。
0309276
NGNG>> 普通 popの戻りの型はpushの引数と同じ型にする。
STLのstackをみてみたら、
・VC++6.0
value_type& top()
const value_type& top() const
void push(const value_type& _X)
void pop()
・g++(egcs-2.91.66)
reference top()
const_reference top() const
void push(const value_type& x)
void pop()
となっていた。今回作成したpopは
STLのstackのtopとpopを組み合わせたものにあたる。
C++とはずれるけどJavaのAPIは、
Object peek() // top相当
Object pop()
Object push(Object item)
となっていた。
普通というわけではありませんでした。スミマセン。
0310276
NGNG> while ( pointer->next != NULL ) { 〜 は要らないですかね。
> getDataとか付けてた時のままにしてました。
push()で pointer = newbox; としているから、
pointerは「最後にpushされたデータを保持するTboxを指す」といえる。
Tboxのpreは「1つ前にpushされたデータを保持するTBoxを指す」、
Tboxのnextは「1つ後にpushされたデータを保持するTBoxを指す」といえるので、
pointer->next != NULLという条件式は
「最後にpushされたデータの1つ後にpushされたデータを保持するTboxはあるか?」
という意味になる。
「最後の1つ後」は変なので、バグか?要らないのか?など考える。
という感じで、意味や役割をはっきりさせると流れを追わなくても、
おかしい場所がわかることがある。
今回はpointer->nextは必ずNULLにしているので、要らないことがわかる。
意味が変だけど、必要で正しいのなら、どういう処理をしているかを
コメントで入れてあげれば次に読むときに楽になる。
あとこの方法は、名前と意味があっていなかったり、
複数の意味を持っていたりするとやりにくくなる。
0311デフォルトの名無しさん
NGNG0312わからん
NGNGint *i = new int;
RECT *rc = new RECT;
って事はやっていいのですか?
0313デフォルトの名無しさん
NGNG・・・つーか、なんでダメなわけ?
0314デフォルトの名無しさん
NGNGOKですが、何か?
0315276
NGNG形がいびつになる(ならない?)のは、
double→intへ変換されるときに切り捨て代入されるから。
横線では X だけなのに、斜め線では X と Y 両方。
そのため、段段短く…。
03161より初心者
NGNG書いてみました
いnt main (void)
{
int a;
int b;
for(b=1;b<=9;b++)
{
if(b<2)
{
cout << " " ;
}
else
{
cout << b <<" ";
}
for(a=1;a<=9;a++)
{
cout << a*b <<" " ;
if(a*b/10<1)
{
cout << " ";
}
}
cout << '\n';
}
return 0;
}
0317デフォルトの名無しさん
NGNGコンパイルエラーに
0318デフォルトの名無しさん
NGNG"いnt main" とはこれいかに。
0319デフォルトの名無しさん
NGNG0320デフォルトの名無しさん
NGNGC++を目指してる初心者に教えるなら
いきなりcoutで教えるなぁ。
CとC++でかぶってる部分はC++で教えればいいと思う。
(mallocは教えない。newを教える。)
<<がビットシフトじゃないの?なんて初心者はまず聞かない
(って言うか知らない)し。
ソートとかコンテナの構造も、
stlすぐ使ってもらうから自分でコード
書かせたりしないな。ただ、概念だけは後でどっかで
勉強してもらう。
まずは動いて面白いと思ってもらいたいな、と。
新鮮味にかけるレスですまん。
0321デフォルトの名無しさん
NGNGSTLのアルゴリズムをバンバン使って、基本概念を覚えないと、他言語に移った
時に障害になる。だから、まずSTLを使って、次にそれをSTLを使わないで書いた
らどうなるか学習していけばいいと思う。
俺自身はSTLは熟練のプログラマが、何度も同じようなソースを書かずに済ませ
る品書きのようなものだと考えている。
それから、cin、coutから入るのは賛成。printf、scanfがオブジェクト指向をサポー
トしてないから。
スレ違いになるが、この前仕事でJavaを触る機会があったのだが、あまりのレス
ポンスの悪さに閉口した。CPUの性能を1/5まで低下させてしまう。クロスコンパ
イラならぬクロスインタープリタだなと実感した。
0322デフォルトの名無しさん
NGNGそしてJAVAが栄えていく
0323320
NGNGレスありがとう。基本概念を覚えないって言ってるんじゃないんだ。
はじめから基本概念のプログラムをやるより、
とりあえずSTL使って、すっきりしたホイッて動くもの見たほうが
今から覚える初心者がやりやすいんじゃないかと思って。
頭ごたごた使うのに慣れてない子も多いみたいだし。
運転手になるか、整備士になるかってあるけど、まずは簡単な
運転を学んでもらって、調子に乗っていただく(笑)
かなり大雑把な言い方すると、
「コンテナっていう奴にいろんなオブジェクトをまとめられるんだよ」
から入って、後で
「vectorは配列で、ランダムアクセスが速いよ。配列って言うのは…」
「listは双方向リストで、挿入が楽チン。双方向リストって言うのは…」
(俺が覚えた順序とは逆(^_^;STL知らなかったからね)
みたいに、大雑把から詳細へ行くほうがやりやすいんじゃないかと。
他言語をそんなに知らないんだけど(PerlとJavaを触ったくらいで。)
JavaだとそんなにSTLと違和感無く使えそうな感じがしたよ。
(詳細を見ないで、特徴からコンテナを選ぶ感じかな?)
Perlは以前の記憶なんで結構あいまい。
コンテナはハッシュでほとんどすませていた覚えも…。
# Perlのオブジェクト指向…面倒だよ…。
>俺自身はSTLは熟練のプログラマが、何度も同じようなソースを書かずに済ませ
>る品書きのようなものだと考えている。
俺は逆かも。例え詳細をきっちりプログラムできない人でも、
これを利用して、熟練プログラマの恩恵をこうむれるものだと思ってる。
Javaは速度問題が解決されたらすごく延びるのかもね<よく知らんけど…
あと、テンプレート早くくっつけるべし。
0324320
NGNG>だから、まずSTLを使って、次にそれをSTLを使わないで書いた
>らどうなるか学習していけばいいと思う。
あ、おんなじ考えだった。激しく同意。
323は早とちりして余計な事書いた。すまん。
0325153
NGNG>>309-310, >>315 276さん
色々とご指摘有り難うございます。
pushとpopしか付けないなら、言われているとおり不要でした。
あと、練習問題でもコメントは入れる癖をつけておくべき、ってことですね。
>>315 でご指摘の方は、DrawKochでキャストしておかないと斜めになったので
切り捨てがアヤシイかなとは思っていたんですが、回避策が思い浮かばず
一応形にはなったからヨシとシトコか、と。
0326153
NGNGコンマ区切りの文字列を分割するには、どうすればいいのでしょうか?
とりあえず自分で調べた範囲ではこんなに長くなりました。
Perlでの @array = split( /,/, $line ) みたいな単純な方法ありますか?
void main( void )
{
string str, temp;
int left, right;
str = "hoge,moge,hage,giko,mona,fusa,zpnu";
cout << str << endl;
left = str.find_first_not_of( "," );
while ( left != string::npos ) {
right = str.find_first_of( ",", left );
if ( right == string::npos ) {
right = str.length();
}
temp = str.substr( left, right - left );
cout << temp << endl;
left = str.find_first_not_of( ",", right );
}
}
0327デフォルトの名無しさん
NGNG0328デフォルトの名無しさん
NGNG#include <iostream>
#include <string>
#include <sstream>
#include <iomanip>
using namespace std;
int main()
{
string str = "hoge,moge,hage,giko,mona,fusa,zpnu";
istringstream is(str);
char buf[128];
cout << str << endl;
while (is.getline(buf, 128, ','))
cout << buf << endl;
}
0329デフォルトの名無しさん
NGNGスマソ。#include <iomanip>は不要デス。
0330デフォルトの名無しさん
NGNG{
for (int i = 1; i <= 9; i++){
for (int j = 1; j <= 9; j++){
cout.width(3);
cout << i * j;
}
cout << endl;
}
return (0);
}
0331デフォルトの名無しさん
NGNG■ このスレッドは過去ログ倉庫に格納されています