size_typeタイプ
文字列:: size_type文字列::サイズ()関数は値を返し、彼は符号なし整数で、次のコードは、trueを返します。
bool main(void)
{
string world;
auto len = world.size(); // 虽然len=0但他是无符号的因此满足<-1
if (len < -1) return true;
else return false;
}
ベクトルコンテナ
C ++プライマーは、すべての値が同じである場合を除き、より効率的な方法は、空のベクターを定義するために、実行時に値を追加することであるP91ページ、ベクトルの第五版と指摘しました。
反復ループまたはループの本体のための範囲の任意の使用は、動作要素を追加することはできません。
イテレータの終了後
反復子だけでなく、容器のために、コンテナ要素の最後の点の後に位置を意味イテレータの終了後、実際には、アレイ内の同様の定義を有します。次の例は、INT * B =&nums2 [10]; NUMS最大屈折率が9であるべきであるが、正当であるが、この文が正しいポインタアレイのB nums2のポインタエンドとして定義されます。
vector<int> nums = { 1,2,3,4,5,6,7,8,9,10 };
auto end = nums.end();
int nums2[10] = {};
int* b = &nums2[10];
内蔵指数は負になることができます
配列インデックスは、調整基準が等しい添字、負であってもよいです。たとえば、次のコードは合法です。しかしながら、このようなベクトルインデックスとして容器がunsigned int型であり、負の添字を受け入れることができません。
int nums2[10] = {};
int *b = &nums2[2];
int a = b[-2]; // 合法,相当于a = *(b-2);
オートサイクルの範囲と
多次元配列の範囲を処理するためのステートメントを使用するために、最も内側のループに加えて、すべてのタイプのループ制御変数が参照されるべきです。行は、変数の型のINT [4]であるべきで:(自動行)のための不正コードに続く第二のセグメント。それは参照型ではないので、それは自動的に初期化コンパイラ行内の最初の配列要素の要素へのポインタの配列に変換されます。したがって、行が* int型のものである、のスコープであることができませんでした。
int a[3][4];
// 合法
for (auto &row : a)
for (auto &col : row)
{
...
}
// 非法,此处auto row : a,row被定义成int *类型。
for (auto row : a)
for (auto &col : row)
{
...
}