トリックオアトリート
ブログネタ:【ハロウィン企画第二弾】もらって嬉しいお菓子は?
参加中ptr->next->next->next->...
リーヨ T-Pistons を聞きながら。
結構子供向けの物が好きだったりします。
精神的に幼稚だからです
//シンプルなリストプログラム
#include <stdio.h>
#include <stdlib.h>
typedef struct _node{
int data;
struct _node *next;
} NODE;
void Insert(int n, NODE **head);
void Print(NODE *head);
int main(void)
{
int n, menu = 1;
NODE *head = NULL;
while (menu==1 || menu == 2) {
printf("(1)Insert (2)Print (3)end\n->");
scanf("%d", &menu);
switch (menu) {
case 1:
printf("data : ");
scanf("%d", &n);
Insert(n, &head);
break;
case 2:
Print(head);
break;
}
}
return 0;
}
void Insert(int n, NODE **head)
{
NODE *new_node = (NODE*)calloc(1, sizeof(NODE));
NODE *ptr = *head;
new_node->data = n;
if (ptr == NULL || ptr->data > n) {
*head = new_node;
new_node->next = ptr;
return;
}
for ( ;ptr->next != NULL;ptr = ptr->next)
if (ptr->next->data > n)
break;
new_node->next = ptr->next;
ptr->next = new_node;
}
void Print(NODE *head)
{
for (;head != NULL;head = head->next)
printf("%d ", head->data);
printf("\n");
}
非常に初歩的なリストプログラム(っていうか作る必要なくね?)
まぁ、代替できるんならしろよ。って感じですが
C++でリストを使うんならlistかvectorでしょうが、listは特定の値に直接アクセス出来ないんだろうか
まぁ、できたらリストじゃないか・・・
Print関数をlist使うかvector使うか考えると、vectorの方がいいのかな?
むっずかしいなぁもう。
追記:
list<int>::iterator it;とか宣言して「*it」とかやればアクセス出来るかも
硬い服
硬い服でハードウェア。なんつって
ご趣味は何ですか?
「料理を少々塩コショウ少々」
なんつって。
計算機工学の勉強(と言っても基本の基本)もしているんですが、まーなんつーか難しいわね。
ガッチガチのハードウェア関連の話なんですが、工学部の人間のくせにハードウェアの知識がない自分にとっては「なにそれおいしいの?」状態w
その講義をしている先生は小学校時代に機械をいじるのが好きで、小6にして複素数の計算も勉強していたそうです
「大学の勉強はあんまり役に立たなかったけど、子供のときの勉強はいまだに役に立ってるね。だから子供のころ興味あったものはいつか役に立つかもよー」
なんていってましたけど、大学生に向かって言わないでくださいorz
小学生の頃何やってたかな自分。川でヨシノボリ捕まえてた記憶しかないorz
はんだ付け難しい
回路考えるのも難しい
前期の実験でいろいろやったけど、簡単な回路でさえ四苦八苦したし
電気回路とかやってる科の人間はあったまおかしいんじゃねーの?とか言ってたら
『嬉々とプログラム書いてるお前の方がよっぽど頭おかしいわボケ』
うん、多分そう思う
教授がもともといた会社では、自殺者&行方不明者が続出してたそうです
プログラマという仕事に何かしら因果関係があるんじゃないかって言ってましたけどね
プログラムをやると、変になるのか
変になるような人が、プログラムをやるのか
どっちだろーねー
イレテータ
イテレータです。イレテータじゃありません。イ テ レ ー タ です。
もう面倒だから反復子でいいんじゃないの?
いやダメです。イ テ レ ー タ です。
C++のcoutとかcinとかのストリームってのは何だか微妙だなぁ~
なんて思っていたのですが、ちょっと考えが変わったかも
#include <iostream>
#include <string>
#include <fstream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
string from, to;
cin >> from >> to;
//入力ストリームのオープン
ifstream is(from.c_str());
//入力イテレータの生成
istream_iterator<string> ii(is);
//引数なしのコンストラクタを呼ぶとend-of-streamイテレータが生成される
istream_iterator<string> eos;
//ファイルの先頭からEOFまでstringで読み込む
vector<string> b(ii, eos);
//bの全体をソート
sort(b.begin(), b.end());
//出力ストリームのオープン
ofstream os(to.c_str());
//出力イテレータの作成
ostream_iterator<string> oo(os, "\n");
//重複なしで出力する
unique_copy(b.begin(), b.end(), oo);
return !is.eof() && !os;
}
ファイルfromから単語を読み出して、アルファベット順にソートした後、単語の重複をしないようにファイルtoへ出力するプログラム(プログラミング言語C++第3版より)
なんか、おぞましいことになってるね
イテレータ(反復子)ってのがどうなってるのかはコンテナとかによるんだけど、見た目的には同じ様に扱える。
やるじゃん、イテレータ。
でも、たった十行程度を理解するのにだいぶ時間かかったorz
便利なモノが凄く多いのはとてもいいのですが、俺なんかじゃ使いこなせないよね~
う~ん、試しに何かC++で作ってみようかなぁ
C++第3版
分厚い。重い。
練習問題にあったソース
void send(int* to, int *from, int count)
{
int n = (count+7) / 8;
switch (count%8) {
case 0: do { *to++ = *from++;
case 7: *to++ = *from++;
case 6: *to++ = *from++;
case 5: *to++ = *from++;
case 4: *to++ = *from++;
case 3: *to++ = *from++;
case 2: *to++ = *from++;
case 1: *to++ = *from++;
} while (--n > 0);
}
}
なにをしてるでしょうか?って、fromからtoにcountだけデータをコピーしてるんだね
さて、「このようなものを書く理由はどのようなものか?」という質問があるわけですよ。
ぶっちゃけもっと簡単にかけるし、わっかんないなーなんて思ったからネットで調べました。
どうやら初めの8の除算などで、変数の減算と比較を1/8にしているそうです。
じゃあ速くなったのか!?と思って自分の書いた簡単なsend関数をつかった実測をしてみるわけなのですよ
void my_send(int* to, int *from, int count)
{
while (count-- > 0)
*to++ = *from++;
}
結果!
あんまり変わらない!(むしろ遅いときもある)
ダメじゃーん!
でもswitchの中であんな風にdo whileを使うのは初めてみた。
面白いアイディアだと思うw
理解できたときは『うおっ!スゲー!』って思いました