по пунктам:
1. по правилам C++ vector<int> mem_TempArray(Position * Rasryad); читается как объявление переменной типа vector<int> (это как раз хитрое имя типа) с именем mem_TempArray и использованием конструктора
vector<int>::vector<int>(unsigned size, const int& init = int());
второй массив позволяет не переписывать ваш код (на самом деле есть много способов эффективно обойтись без него).
В нашем случае каждому элементу TempArray присваивается адрес каждого последовательного блока размером Position. То есть адрес начала каждой строчки.
2. В C++ можно переопределять почти все операторы. У vector<T> есть операторы:
Код:
const T& vector<T>::operator[](unsigned pos) const;
T& vector<T>::operator[](unsigned pos);
они возвращают ссылку на элемент по номеру pos. Адрес ссылки - это адрес памяти этого элемента.
таким образом, если у нас vector<int>, Position=10000, то каждому n-ному элементу TempArray присваивается адрес _data + n*10000*sizeof(int), где _data - это адрес куска, который занял вектор.
на всякий случай напомню, что для 32-разрядной ОС windows виртуальная память линейная, размером до 4Gb и считается, что типы данных имеют значения (гробо):
short -32K..+32K
long -2G..+2G
int -2G..+2G
unsigned short 0K..+64K
unsigned long 0K..+4G
unsigned int 0K..+4G
то есть теоретически в вектор может поместиться (4G - _data)/sizeof(T) значений. Думаю 100 миллионов int в памяти поместятся легко (только в глубокий свап уйдут)