C++Primerノート+練習問題解答(九)
2015/2/10更新:今日管理人からタイトルにプラス記号が書けないという問題が解決したことを知らせられましたが、結局やってみましたが、相変わらずですね.
CSDNのMarkDownエディタは本当にお父さんですね.昨夜に加えて今日はもう2回も穴をあけられた.この博文は最も腐った文章で、修正する気持ちがありません.タイトルも2つのプラス記号を書くことができず、CPPで代用するしかありません.
0.引用:
≪コンテナ|Container|emdw≫:コンテナは、特定のタイプのオブジェクトのセットです.エレメントのシーケンスコンテナ内の位置は、コンテナに加えたときの位置に対応します.≪関連コンテナ|Associate Container|oem_src≫:要素の位置は、関連するキーワード-値によって決まります.関連コンテナの分類:順序と無秩序.
1.シーケンスコンテナの概要:
1.順番容器:
vector/list/deque/array/string/forward_Listは上記6種類.
2.パフォーマンスの折衷:
1.コンテナに要素を追加または削除するコスト.2.要素への非順序アクセスのコスト.これに対応して、ランダムアクセス(一般的には下)の両方がコンテナ間の動作の違いを決定します.例:ベクトルにpush_がありませんfront操作.vectorという容器ではヘッダエレメントを挿入するコストが高いので、性能を考慮して、いっそこの操作をキャンセルしてinsertで代用します.
3.array関連:
ここのarrayはC++11規格に収録されたばかりです.一般的な組み込み型配列ではありません.しかし、固定されたサイズなど、多くの特性が一致しています.
4.forward_リスト関連:
arrayと同様に、C++11に追加されたコンテナタイプです.一方向チェーン・テーブル
コンテナ選択関連:
より良い選択がない限りvectorの使用をお勧めします.
2.コンテナ・ライブラリの概要:
1.反復器:
反復器は増分演算子を定義します.下付き演算子が定義されていないコンテナもありますが、コンテナには反復器が定義されています.
2.反復範囲:
反復器範囲の概念:この概念は標準ライブラリの基礎です.反復器範囲は、同じ容器を指す一対の反復器によって表される範囲である.左閉区間:典型的な左閉右開の範囲を示す.数学は「[beg,end]は数学の定義と一致する.beg<=endを暗黙的に定義する.我々は常にendに達するまで繰り返し増加することができる.1.beg=endの場合、範囲は空である.2.beg!=endの場合、範囲には少なくとも1つの要素がある.
3.コンテナのタイプメンバー:
使用済みタイプ:size_type/iterator/const_iterator . ≪タイプ別名|Type Alias|emdw≫:コンテナ内の特定の要素のタイプが分からない場合に使用できます.要素タイプ:value_type .コンテナ内の要素のタイプ.参照タイプ:reference、参照タイプ.例:
4.begin/endメンバー:
2つのメンバー関数が呼び出されると、最初の要素と最後の要素の反復器を指すか、または指します.複数のバージョン:cはcosntを表し、rは逆反復器を表す.ここでc&&rは組み合わせて使用できます.
5.コンテナの定義と初期化:
1.array以外にdefault Cstorがある.2.サイズパラメータはシーケンスコンテナのみが受け入れられます.arrayを除きます.初期化の方法:1.コピーコンストラクション関数やコピー初期化と同様に、1つのコンテナを別のコンテナのコピーに直接初期化します.arrayを除く.この場合、コンテナのタイプと要素のタイプが一致することに注意してください.2.一対の反復器で指定した範囲をコピーします.この場合、コンテナタイプのマッチングは必要ありません.要素タイプが相互に関連付けられているだけです.
練習問題の解答:
9.1—9.34:
ブラウザのクラッシュを2回経験しましたが、CSDNが自動保存されていない状況で、私は完全にクラッシュしました.だから私はその答えを永遠に消すことにした.
9.35
違い:1.sizeは、現在のコンテナ内の要素の数です.2.capacityは、コンテナがメモリを再割り当てせずに収容できる最大数です.
9.36
あり得ない.capacityは動的に割り当てられているからです.
9.37
1.listのメモリ使用量は連続していません.2.arrayは固定サイズです.
9.38
9.39
究極の目標は容器の大きさを512に調整することである.読み込まれた単語の数が512未満であれば、空の文字で揃えればよい.読み込まれた単語の数が512より大きい場合、後ろの余分なstringを切り取る.
9.40
答えは9.39を参考にすることができます.
9.41
9.42
**
9.43
なんだかこの問題が変な感じがします.だから飛び越えることにしました.
9.44
KMPでマッチングして欲しいの?やはり容器
9.45–9.449
略、文字列ここのテーマはしばらくあきらめました.
9.50
9.51–9.52
略.
CSDNのMarkDownエディタは本当にお父さんですね.昨夜に加えて今日はもう2回も穴をあけられた.この博文は最も腐った文章で、修正する気持ちがありません.タイトルも2つのプラス記号を書くことができず、CPPで代用するしかありません.
0.引用:
≪コンテナ|Container|emdw≫:コンテナは、特定のタイプのオブジェクトのセットです.エレメントのシーケンスコンテナ内の位置は、コンテナに加えたときの位置に対応します.≪関連コンテナ|Associate Container|oem_src≫:要素の位置は、関連するキーワード-値によって決まります.関連コンテナの分類:順序と無秩序.
1.シーケンスコンテナの概要:
1.順番容器:
vector/list/deque/array/string/forward_Listは上記6種類.
2.パフォーマンスの折衷:
1.コンテナに要素を追加または削除するコスト.2.要素への非順序アクセスのコスト.これに対応して、ランダムアクセス(一般的には下)の両方がコンテナ間の動作の違いを決定します.例:ベクトルにpush_がありませんfront操作.vectorという容器ではヘッダエレメントを挿入するコストが高いので、性能を考慮して、いっそこの操作をキャンセルしてinsertで代用します.
3.array関連:
ここのarrayはC++11規格に収録されたばかりです.一般的な組み込み型配列ではありません.しかし、固定されたサイズなど、多くの特性が一致しています.
4.forward_リスト関連:
arrayと同様に、C++11に追加されたコンテナタイプです.一方向チェーン・テーブル
コンテナ選択関連:
より良い選択がない限りvectorの使用をお勧めします.
2.コンテナ・ライブラリの概要:
1.反復器:
反復器は増分演算子を定義します.下付き演算子が定義されていないコンテナもありますが、コンテナには反復器が定義されています.
2.反復範囲:
反復器範囲の概念:この概念は標準ライブラリの基礎です.反復器範囲は、同じ容器を指す一対の反復器によって表される範囲である.左閉区間:典型的な左閉右開の範囲を示す.数学は「[beg,end]は数学の定義と一致する.beg<=endを暗黙的に定義する.我々は常にendに達するまで繰り返し増加することができる.1.beg=endの場合、範囲は空である.2.beg!=endの場合、範囲には少なくとも1つの要素がある.
3.コンテナのタイプメンバー:
使用済みタイプ:size_type/iterator/const_iterator . ≪タイプ別名|Type Alias|emdw≫:コンテナ内の特定の要素のタイプが分からない場合に使用できます.要素タイプ:value_type .コンテナ内の要素のタイプ.参照タイプ:reference、参照タイプ.例:
vector::difference_type count
;//differenceというcount変数を定義しました.type. 4.begin/endメンバー:
2つのメンバー関数が呼び出されると、最初の要素と最後の要素の反復器を指すか、または指します.複数のバージョン:cはcosntを表し、rは逆反復器を表す.ここでc&&rは組み合わせて使用できます.
5.コンテナの定義と初期化:
1.array以外にdefault Cstorがある.2.サイズパラメータはシーケンスコンテナのみが受け入れられます.arrayを除きます.初期化の方法:1.コピーコンストラクション関数やコピー初期化と同様に、1つのコンテナを別のコンテナのコピーに直接初期化します.arrayを除く.この場合、コンテナのタイプと要素のタイプが一致することに注意してください.2.一対の反復器で指定した範囲をコピーします.この場合、コンテナタイプのマッチングは必要ありません.要素タイプが相互に関連付けられているだけです.
練習問題の解答:
9.1—9.34:
ブラウザのクラッシュを2回経験しましたが、CSDNが自動保存されていない状況で、私は完全にクラッシュしました.だから私はその答えを永遠に消すことにした.
9.35
違い:1.sizeは、現在のコンテナ内の要素の数です.2.capacityは、コンテナがメモリを再割り当てせずに収容できる最大数です.
9.36
あり得ない.capacityは動的に割り当てられているからです.
9.37
1.listのメモリ使用量は連続していません.2.arrayは固定サイズです.
9.38
#include
#include
#include
using namespace std;
int main(){
vector<int> ivec(10);
cout << "ivec'size is " << ivec.size() << endl
<< "ivec'capacity is " << ivec.capacity() << endl;
ivec.resize(50);
cout << "ivec'size is " << ivec.size() << endl
<< "ivec'capacity is " << ivec.capacity() << endl;
ivec.resize(100);
cout << "ivec'size is " << ivec.size() << endl
<< "ivec'capacity is " << ivec.capacity() << endl;
system("pause");
return 0;
}
9.39
究極の目標は容器の大きさを512に調整することである.読み込まれた単語の数が512未満であれば、空の文字で揃えればよい.読み込まれた単語の数が512より大きい場合、後ろの余分なstringを切り取る.
9.40
答えは9.39を参考にすることができます.
9.41
#include
#include
#include
using namespace std;
int main(){
vector<char> cvec = { 'a', 'f', 'e', 'u' };
string str(cvec.begin(), cvec.end());
for (auto x : str)
cout << x << " ";
cout << endl;
system("pause");
return 0;
}
9.42
**
vector svec
が一番いいです.9.43
なんだかこの問題が変な感じがします.だから飛び越えることにしました.
9.44
KMPでマッチングして欲しいの?やはり容器
vector
でテーマを教えるのを忘れたことを考えてみてください.9.45–9.449
略、文字列ここのテーマはしばらくあきらめました.
9.50
。
#include
#include
#include
using namespace std;
int main(){
vector<string> svec;
string word;
cout << "Enter strings " << endl;
while (cin>>word){
svec.push_back(word);
}
cout << "The sum is :";
int sum = 0;
for (auto& x : svec){
sum += stoi(x);
}
cout << sum << endl;
system("pause");
return 0;
}
9.51–9.52
略.