C++のstringクラスで最大何byte保持可能か知っている人がいたら教えてください!!(OSはUNIXです)

A 回答 (1件)

STLのパッケージが何かにも依存するかと思います。


だいたいのSTLではoperator newにて実装されているでしょうから、最大確保可能メモリ量はOSで認識される最大値まで可能かと思います。

32bit UNIX系であれば大体2GBまでは行くのではないでしょうか?
もちろんスワップサイズや実装メモリにもある程度依存するでしょうが・・・
    • good
    • 0
この回答へのお礼

回答有難うございました。

調査してみます。

返事が遅れて申し訳ありません。

お礼日時:2001/08/18 15:16

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルで特定のマイナス値を除く最大値と最小値について

エクセルで、ある特定の値(-99999)を除く最大値と最小値を

=MAX(IF(A1:A10<>-99999,A1:A10,""))
=MIN(IF(A1:A10<>-99999,A1:A10,""))

の配列数式を使って求めました。

ただ、A1:A10がすべて-99999の場合、0がかえってきてしまいます。
この場合、-99999と表示するにはどのようにすればよいのでしょうか?

1つの式で、上記2つの処理をするにはどのようにすればよいのでしょうか?

Aベストアンサー

修行中の身なので『指導』は勘弁してください。:D

>最大値は-99999以外の値がすべてマイナス値の場合に0がかえってきてしまいます。
提示の式
>=MAX(IF(A1:A10<>-99999,A1:A10,""))
これでも同じですよね?
なので空白セルはないと判断しました。

あるなら、ベタですが
=IF(AND(A1:A10=-99999),-99999,MAX(IF(A1:A10<>-99999,IF(A1:A10<>"",A1:A10,""))))
の配列数式で。

#他の方の案もお待ちになられたほうが良いかもしれません。

QC/C++関数間でのStringクラスの扱い

以下のようなコードを実行してみましたが思い通りに動いてくれません.
"sample"という文字列がstrへとコピーされると思ったのですが.
stringクラスのc_str()メソッドはconst char*だと言っているので無理矢理キャストしたのが原因でしょうか.stringクラスは記憶領域を自動で変更してくれるのではないのですか.それともこの挙動は仕様ですか.

-------- 以下コード --------
#include <iostream>
#include <string>

using namespace std;
int func(char *);

int main(void)
{
    string str("");
    func((char *)str.c_str());
    cout << "String: " << str << endl;
    return EXIT_SUCCESS;
}

int func(char *buf)
{
    buf = "sample";
    return 0;
}
-------- 以上コード --------

以下のようなコードを実行してみましたが思い通りに動いてくれません.
"sample"という文字列がstrへとコピーされると思ったのですが.
stringクラスのc_str()メソッドはconst char*だと言っているので無理矢理キャストしたのが原因でしょうか.stringクラスは記憶領域を自動で変更してくれるのではないのですか.それともこの挙動は仕様ですか.

-------- 以下コード --------
#include <iostream>
#include <string>

using namespace std;
int func(char *);

int main(void)
{
    string...続きを読む

Aベストアンサー

> func((char *)str.c_str());

c_str()がstringの内部バッファをそのまま返すことは保証されていません。
だから func(&str[0]) が正解。

Q平均勤続年数の記載は通常社員(役員、派遣除く)で算出されてますでしもうか?? 併せて、出向受け入れ者

平均勤続年数の記載は通常社員(役員、派遣除く)で算出されてますでしもうか??
併せて、出向受け入れ者ら上記正社員に含めないことが一般的でしょうか?

Aベストアンサー

正社員が対象で、その採用から退社(対職)まで、が対象のはずです。
役員は、なったときには「退職扱い」になります。

QC,C++,C++/CLIの構造体とクラス

C++の構造体・クラスって、メンバのアクセス指定子のデフォルトが
privateかpublicかという違い「だけ」しか全くないのでしょうか?

クラスにおける
value class / ref class
という分類はC++/CLIのもので
これについては
value class の方は C言語の構造体に近いという事でいいでしょうか?

ref classの方は
ネイティブのC++のクラスを
マネージ用にしたようなもので

C++/CLIの構造体は
C++のそれと同じで
OKですか?

そしてそれらの構造体には、値型・参照型といった分類はないのでしょうか?

Aベストアンサー

> ということは、structも継承可、という事でしょうか?

structでも継承可能です。

> 継承のアクセス指定の方は
> クラスと構造体ではどうなるのでしょうか?

class A : Base {};



class A : private Base {};

と等価です。
一方、

struct A : Base {};



struct A : public Base {};

と等価です。

> そして「集成体」というのが初めて知ったのですが
> これはいわゆる、配列や・・・ある条件下でのクラス・・?
> なのでしょうか?

配列と以下の条件をすべて満たすクラスのことです。
・ユーザー定義のコンストラクタを持たない
・非公開または限定公開のメンバを持たない
・基底クラスを持たない
・仮想関数を持たない

ちなみにC言語の集成体は、配列と構造体の総称です(共用体は集成体ではありません)。

Qエクセルで最小値から0を除く方法

早速ですが、エクセル入力したデータから最大値と最小値を求めようとしています。
最大値は=MAX(A1:A100)で求められるのですが、最小値には0が入っていると=MIN(A1*A100)では0となってしまいます。
0以外で最小値を求めたいのですが、どのように設定すればよいでしょうか?
どなたかご教授いただけると助かります。

Aベストアンサー

配列関数を使用することになります。
=MIN(IF(A1:A100=0,"",A1:A100))
と入れて、 Ctrl+Shift+Enter で決定します。
式が{}でくくられますが、
中身のIF文の通り、A1~A100のセルで0の値は 空白、それ以外はそのまま
で一度計算してその中の最小値を出します。

QC++ String クラスについて

こんにちわ。
C++のStringクラスについて質問です。

#include <iostream.h>
#include <string.h>

struct DATA
{
string word;
int *count;
};

↑の様な形でストリング型のwordを定義したいのですが、うまくいきません・・・

私は Microsoft Visual C++ 6.0 を使っています。

コンパイラによって、上の様な定義ができなかったりするのでしょうか? char word[10]; の様にしたほうがいいのでしょうか?

string word; と char word[10]; では、後々どのような違いが生じてくるでしょうか? つまらない質問ですみません。よろしくおねがいします。

Aベストアンサー

ヘッダの問題については#1さんが解決済なので、
std::string wordとchar word[10]で後々どのような違いが生じるかについて。

char word[10]は固定長の配列ですので、終端のヌル文字を含めなければ最大9文字までの文字列しか扱えません。
std::string wordではバッファは動的に確保/解放されるので任意の文字列長の文字列を扱えます。

固定長で問題無く、大した文字列操作を必要としないならば前者を使った方がパフォーマンスが良いことが多いでしょう。
そうでなければ、std::stringを使った方が大抵の場合コーディングも保守も楽になります。

Qエクセルで0を除く平均値と0の平均値を同時に表示させる方法について

エクセルで、0を除いた平均を、
{=AVERAGE(IF(A1:A10<>0,A1:A10,""))}の数式を使って求めた場合、
データがすべて0の列の平均はエラー値になってしまいます。

すべてが0の場合は0と表示させたいのですが、どのような方法がありますでしょうか?

1つの計算式を使って、上記の2つの処理は可能でしょうか?

Aベストアンサー

エラー値の場合に,0と表示する計算式ですが,いかがでしょうか?

=IF(ISERROR(AVERAGE(IF(A1:A10<>0,A1:A10,""))),0,AVERAGE(IF(A1:A10<>0,A1:A10,"")))

QC++でのstringクラスの内部の挙動

最近C++でクラスを理解し始めて疑問に思ったことなんですが。

string A = "abcdef";

という風に直感的にstringに文字列を代入出来ていたので何の疑問も持たず使っていたんですが、これをどのように実現しているか内部の挙動がよくわかりません。

srtcopyはやり方は面倒臭いですがこっちは単純に関数に値を渡しているだけなので理解出来ます。

内部で=演算子のオーバーロードをしているんじゃないかと思って、=演算子をオーバーロドした自分で作ったクラスでテストしてみたんですが

Testclass A;
A = "abcdef";

は可能ですが、stringの例のように変数宣言と同時に代入する
Testclass A = "abcdef"
としてみると、Testclass型への変換が出来ませんとなって、string型と同じ事が出来ません。

stringクラスの中でどのようにクラス宣言直後の代入をしているか教えてください

Aベストアンサー

代入ではなくて初期化です。コンストラクターで初期化できます。

QACCESSにてフィールド間の平均(空白除く)と空白の個数を反映するためのモジュール

ACCESS初心者です。

図のようなテーブルがあります。
このテーブルの右側にクエリで「各商品の平均値(空白セルは省く)」
ならびに「空白セルの個数」を反映したいと思っております。

過去に質問をさせていただいた案件(https://oshiete.goo.ne.jp/qa/9327298.html)の内容と類似することから、
恐らくモジュールならびにクエリ式を合わせ技にて両値を反映することになるかと想定しているのですが、調べてもなかなか当案件に類似した内容の記載を見出すことができません。

モジュール・クエリ両内容をどなたかご提案いただけないでしょうか?

何卒よろしくお願いいたします。

Aベストアンサー

図示されたようなテーブル設計はよくありません。
もしかしてクロス集計クエリから作成したテーブル?
それとも、他からインポートしたデータ?
欠点は、
日にち分のフィールドが必要、
月が替わると再度テーブルを作り直す必要がある、
かといって年間(365日)分だけ作るのも不可。フィールド数は最大でも255まで。
集計などの分析が困難など後々泥沼に。。。
http://www.accessdbstudy.net/entry/20140915/p1

商品名 日付    価格
イチゴ 2016/07/01 200
イチゴ 2016/07/03 400
イチゴ 2016/07/04 400
バナナ 2016/07/02 100
バナナ 2016/07/03 150
メロン 2016/07/01 200
メロン 2016/07/02 150
メロン 2016/07/03 100
メロン 2016/07/04 120
メロン 2016/08/01 200

のようなデザインであればクロス集計で、
テーブル名をT1とするとSQL文は、

TRANSFORM First(T1.価格) AS 価格の先頭
SELECT T1.商品名,
(DMax("日付","T1","日付 Between #2016/7/1# And #2016/7/31#")-DMin("日付","T1","日付 Between #2016/7/1# And #2016/7/31#")+1)- DCount("日付","T1","日付 Between #2016/7/1# And #2016/7/31# and 商品名='" & 商品名 & "'") AS 売切回数,
Int(Avg(T1.[価格])+0.5) AS 平均価格,
Max(T1.価格) AS 最大価格
FROM T1
WHERE T1.日付 Between #2016/7/1# And #2016/7/31#
GROUP BY T1.商品名
PIVOT Format(T1.日付,"mm/dd");

 で、
商品名 売切回数 平均価格 最大価格 07/01 07/02 07/03 07/04
イチゴ   1     333   400  200      400  400
バナナ   2     125   150      100  150
メロン   0     143   200  200   150  100  120
のようになります。
新規クエリをSQLビューに切り替えて上記のSQL文を貼り付けてみてください。
平均価格は四捨五入しています。
デザインビューに切り替えられますので確認してみてください。
売切回数を求める部分の出来が良くありません。
レコード数次第では遅くて使い物にならないかも?ご参考まで。

図示されたようなテーブル設計はよくありません。
もしかしてクロス集計クエリから作成したテーブル?
それとも、他からインポートしたデータ?
欠点は、
日にち分のフィールドが必要、
月が替わると再度テーブルを作り直す必要がある、
かといって年間(365日)分だけ作るのも不可。フィールド数は最大でも255まで。
集計などの分析が困難など後々泥沼に。。。
http://www.accessdbstudy.net/entry/20140915/p1

商品名 日付    価格
イチゴ 2016/07/01 200
イチゴ 2016/07/03 400
イチゴ 2016/07/04 4...続きを読む

QUNIXのC++で共通クラスを作ってみんなで使いたい。

Linux上で稼動するあるC++のプログラムを作るのに、
みんなで使えるような、共通クラスを作りたいと思っています。
クラス自体の作り方(プログラムコード)はだいたい分かるのですが、
それをどのような形(lib?またはアーカイブ?またはdll?)で
配布すると、みんなが使いやすいものになるのかが分かりません。
手順など、どなたか教えてください。
私が何とか予想できる手順を以下に書きます。

(1)普通にクラスを作成する。(例えばaaa.cppと言う名前のファイルに)
  public class AAA{
public:
void init();
void clean();
private:
int elems;
}
void AAA::init(){
elems = 0;
}
void AAA::clean(){
elems = 0;
}
※この時点でクラスの定義部分だけをヘッダーファイルとして
  別ファイルにしておいた方が良いのでしょうか?

(2)このクラスをコンパイルして、みんなに提供できる何らかの形にする。
 ※ここがよく分かりません!!
 ※”.a”というアーカイブを作成する方法は知っています。
  これを作れば良いのでしょうか?

(3)出来上がった共通クラスをどうにかして、他の人のプログラムで使えるようにする。
 ※予想としては、(1)で作ったクラス定義のヘッダーファイルを
  includeする(のかな?)
  それから、コンパイルする時にmakefileの中で(2)で作った
  ライブラリ(?)を一緒にリンクする(のかな?)
 ※プログラム中では、いきなり
   AAA testBuf = new AAA();
testBuf.init();
などと使えるのでしょうか?

Linux上で稼動するあるC++のプログラムを作るのに、
みんなで使えるような、共通クラスを作りたいと思っています。
クラス自体の作り方(プログラムコード)はだいたい分かるのですが、
それをどのような形(lib?またはアーカイブ?またはdll?)で
配布すると、みんなが使いやすいものになるのかが分かりません。
手順など、どなたか教えてください。
私が何とか予想できる手順を以下に書きます。

(1)普通にクラスを作成する。(例えばaaa.cppと言う名前のファイルに)
  public class AAA{
...続きを読む

Aベストアンサー

> 私が何とか予想できる手順を以下に書きます。

やってみれば、すぐ分かることなのに。というのも、orange_pie さんが考えて
いる通りで、実現できるから、です。

他のプログラム(コンパイル単位)で必要なのは、クラスの宣言です。なので、

class AAA{
public:
void init();
void clean();
private:
int elems;
};

は、ヘッダファイル aaa.h に記述します。クラスのメソッドの定義は、aaa.cpp に
記述します。

#include "aaa.h"

void AAA::init()
{
elems = 0;
}
void AAA::clean()
{
elems = 0;
}

で、その定義をコンパイルしてアーカイブに入れておきます。(知っているようですが)例えば、

% gcc -c aaa.cpp
% ar -r libaaa.a aaa.o

使う側では、ヘッダファイルをインクルードするだけで、コンパイルが通ります。

#include "aaa.h"

int main()
{
AAA *testBuf = new AAA();
testBuf->init();
return 0;
}

リンクする際には、先程作成したアーカイブが必要になります。

% gcc -o test_aaa test_aaa.cpp -laaa


ね、質問に書いてあるままでしょう?

# 細かい記述ミスなんかは訂正をしています

> 私が何とか予想できる手順を以下に書きます。

やってみれば、すぐ分かることなのに。というのも、orange_pie さんが考えて
いる通りで、実現できるから、です。

他のプログラム(コンパイル単位)で必要なのは、クラスの宣言です。なので、

class AAA{
public:
void init();
void clean();
private:
int elems;
};

は、ヘッダファイル aaa.h に記述します。クラスのメソッドの定義は、aaa.cpp に
記述します。

#include "aaa.h"

void AAA::init()
{
elems = 0;
...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報