vectorのメモリ連続性について

std::vectorにていしてポイント構造体情報を動的に格納し、ラインを描画をしたい。
普通であれば

  POINT points[5]={ POINT, POINT, POINT, POINT, POINT}
  m_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE );
  m_pD3DDevice->DrawPrimitiveUP(D3DPT_LINESTRIP,5,points,sizeof(POINT));

と、定数5を指定して配列を作成し、先頭ポインタからバイト数とポイント数を指定してなめるように見ていく。
が、そこでVECTORを使うと

  vector<POINT> points;
  points.push_back( POINT );     // *5回
  m_pD3DDevice->SetFVF(D3DFVF_XYZ | D3DFVF_DIFFUSE );
  m_pD3DDevice->DrawPrimitiveUP(D3DPT_LINESTRIP,m_points.size()-1&m_points.front(),sizeof(POINT));

こうもかける。
ようは先頭ポインタを渡してPOINTの構造体サイズで指定回数読ませればいいということだ。こうすることで動的に描画ポイント数を変化させることができて非常に柔軟なライン描画が可能だ。

さて、ここで問題になるのがVECTORのメモリが動的に確保しながらも隣接メモリに確保されるかというところだ。
一箇所でも途中抜けをするのであれば、ラインを動的に追加しても描画時にセグメンテーションエラーかゴミメモリを参照することとなる。

どこのリファレンスをみても連続性の話は出てこないんですが、サイトを回っていると以下の記述で保障されている。
C++標準化委員会の記事だそうです。

Add the following text to the end of 23.2.4 [lib.vector], paragraph 1. 

The elements of a vector are stored contiguously, meaning that if v is a vector 
where T is some type other than bool, 
then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().

ベクトルの要素は隣接して格納される。
 v が<T, Allocator>でTがbool以外のの場合、0<=n<v.size()の時&v[n] == &v[0] + n となる

だ、そうで。
これはかなり使えるのでは・・・・
vectorなめてた・・・だてにソフト配信サイト名でもつかわれてない

しかし不思議だ・・・・最大値のわからないデータ追記をどうやって連続メモリに保存してるんだろう・・・普通にかんがえたらありえない・・・
デフラグチックなスペース作成のためのデータ移動とか粋なことやってるんだろうか・・・
いや・・・max_size()があるってことは、適当に空間確保してそのサイズまでなら動的に入れてるだけか・・・それだけなら興ざめだなぁ・・・メモリの無駄も多いだろうし。
今度vector読んでみるか。。。