[c++]copyってコピーじゃないの?

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

[c++]copyってコピーじゃないの?

投稿記事 by purin52002 » 7年前

unityのアップデートが来たのでアップデートしました。いえ、しています。
なんかわかんないけどかれこれ4,5時間アップデートしています。
そして低スペックなマイPCではこの状態でVSを立ち上げるとフリーズしてしまうわけですよ。

っていうわけで日記更新します。
来週はtoeicなんですが日記更新します^p^(だから点数が伸びない

[hr]

今日はalgorithmのcopyの話をします。

関数名で何をする関数かわかりますね。コピーです。

CODE:

#include
#include

using namespace std;

int main()
{
    vector a(5,1);//{1,1,1,1,1}
    vector b(5);//{0,0,0,0,0}

    copy(begin(a),end(a),begin(b));//b={1,1,1,1,1}
}
、、、代入でよくね?
それとも代入より早いのか?

そんなことは知りません。
そもそもコピーするためにcopy使ったことがありません。

じゃあ全然便利じゃないじゃん。

しかし、そういうわけでもない^p^

CODE:

#include
#include
#include
#include

using namespace std;

int main()
{
    vector a(5,1);//{1,1,1,1,1}
    ostream_iterator out(cout,",");

    copy(begin(a),end(a),out);
    cout<<endl;//コンソールに1,1,1,1,1,と出力
}
わけがわからないよ^p^
もっとわからないのはこの使い方がc++のリファレンスサイトで紹介されていることhttp://kaworu.jpn.org/cpp/std::copy

これの何がすごいって<<演算子が定義されてればなんにでも使えるってこと、
そしてコンソール出力だけじゃなく、ファイル出力だってできるっていうことです。

一番すごいのはこんな変態コードを考えた人だと思う^p^

どうしてこのコードでコンソールに数字が出力されるのか、、、
この理由を考えればストリームが何かわかる、、、ような気がする^p^


よく使う関数は大体紹介したような気がします。(4つしかしてない^^;

よく使うわけではないけど結構便利な関数が
  • sort
    ソートする
  • min(max)_element
    最小(最大)値のイテレータを返す
  • find
    クエリと一致するイテレータを返す
ぐらいです。

こうしてみると便利な関数って意外と少ないですね。

便利な関数紹介はとりあえず今回で終わりですかね。
短い一生でした^p^

アバター
usao
記事: 1889
登録日時: 11年前

Re: [c++]copyってコピーじゃないの?

投稿記事 by usao » 7年前

min, max, swap ← よく使うのはこのへん

YuO
記事: 947
登録日時: 13年前

Re: [c++]copyってコピーじゃないの?

投稿記事 by YuO » 7年前

書籍紹介) Effective STL……って桐原書店がピアソンから手を引いた影響で絶版本ですね……。
sortとnth_elementとpartial_sortの違い,なんてのはこの本くらいしか載っていなかった覚えが……。

英語版で良ければ,Kindle版が提供されています。

アバター
purin52002
記事: 235
登録日時: 7年前
連絡を取る:

Re: [c++]copyってコピーじゃないの?

投稿記事 by purin52002 » 7年前

技術書の類は日本語でも読めないですからね^^;英語版なんてとても、、、
いや、英語だからってのは言い訳ですね。toeicの勉強がてらちょっと読んでみます^^

ISLe
記事: 2650
登録日時: 13年前

Re: [c++]copyってコピーじゃないの?

投稿記事 by ISLe » 7年前

こちらもイテレータの仕組みを考えながら読み解くと良いです。

1つめのコードで、begin(b)はb配列の先頭要素を差すイテレータ。
copyは要素をひとつコピーするごとにイテレータをひとつ進めます。
それをbegin(a)からend(a)の直前まで繰り返す。

2つめのコードは、coutへint要素に","を付けて出力するイテレータ。
それをbegin(a)からend(a)の直前まで繰り返す。
コメントが付いているところは改行(endl)を出力しているだけ。