アプリ版:「スタンプのみでお礼する」機能のリリースについて

質問は表題のとおりです。
単純な方法では以下の通りになると思いますが、
(C言語文字列から string への変換のように)
一括変換の仕組みは vector にないのでしょうか?
static const int n=5;
int a[n]={0,1,2,3,4};
std::vector<int> v(n);
std::vector<int>::iterator vit=v.begin();
for(int i=0; i<n; i++){
*vit++ = a[i];
}

上記の例では n=5 ですが、nがとても大きな場合に適用したいと考えています。
ちなみに、gcc 3.4.3 を使っています。

A 回答 (4件)

> C言語の配列に関して、STL のアルゴリズム(binary_searchなど)を


> 使いたいと考えているのですが、
それなら素直にこうすればよいのではないの?

--------------------
#include <algorithm>
#include <iostream>
int main(){
  using namespace std;
  static const int n=5;
  int a[n]={0,1,2,3,4};

  cout << binary_search(a, a+n, 3) << endl;
  cout << binary_search(a, a+n, 6) << endl;

  return 0;
}
    • good
    • 0
この回答へのお礼

C言語の配列に関して、STL のアルゴリズムって
使えるんですね!! 目から鱗です。
ずーっと、使えないと思い込んでいて、
自分で実装しようかとか
いろいろ考えていました。
ありがとうございました。

お礼日時:2007/12/13 20:42

static const int n=5;


int a[n]={0,1,2,3,4};
std::vector<int> v(n);
v.assign(a,a+n);
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました。
実際に試してみたのですが、
元の私の例と速度的には
全く変わりませんでした。
でも、No.4 さんのご回答でそもそも変換しなくても
良いとわかったので、問題は解決しました。
ありがとうございました。

お礼日時:2007/12/13 20:44

うーん。

何とどう比べて早くしたいのでしょうか?

この回答への補足

少し言葉足らずでした。すみません。
C言語の配列に関して、STL のアルゴリズム(binary_searchなど)を
使いたいと考えているのですが、
そのために、配列からベクトルにデータコピーする
オーバーヘッドを気にしています。

もちろん、そのままでは使えないと思いますので vector に
うまく変換できたらいいかな?と思いまして質問しました。

vector<int> のメモリアロケーションが、C言語の配列+アルファ
だとしたら、コンストラクトする際に、うまくポインターを渡せば
最適化してくれないのかなと考えが及んでいます。
(もちろんコンパイラの実装によると思いますが)
No.1 の方が書かれた方法が私のイメージに近いので、実際に
処理が早くなるか試してみようと考えています。

補足日時:2007/12/13 18:42
    • good
    • 0
この回答へのお礼

参考意見ありがとうございました。
おかげで、No.4 さんの回答が得られました。

お礼日時:2007/12/13 20:47

実行が高速な訳ではありませんが...



static const int n=5;
int a[n]={0,1,2,3,4};
std::vector<int> v(&a[0], &a[n]);

とすれば、少なくともコーディングは高速化できます。
    • good
    • 0
この回答へのお礼

ご回答、ありがとうございました。
実際に試したところ、コーディングだけでなく、
処理速度も30%ほど改善しました!!
(-O3 オプションを付けています。)

でも、No.4 さんの回答により、
そもそも変換の必要ないことがわかりました。
ありがとうございました。

お礼日時:2007/12/13 20:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています