В Google App Engine нет никакого хранения плоского файла. Все должно войти к Хранилище данных , который немного похож на реляционную базу данных, но не совсем.
Вы могли хранить файлы как TextProperty или атрибуты BlobProperty.
существует предел 1 МБ на записи DataStore, которые могут или не могут быть проблемой.
Простым обходным путем будет замена вектора на тот, который у вас есть:
vector<double> myown;
vector<double> someoneelses = foo();
std::swap( myown, someoneelses );
Более сложный, но, возможно, лучший подход - написать свой собственный распределитель для вектора и позволить ему выделить из пула вы поддерживать. Нет личного опыта, но это не так уж сложно.
Смысл использования std :: vector в том, чтобы не беспокоиться о данных в нем:
& v [0]
. Если вы действительно не хотите сохранять свой вектор , вам придется скопировать свои данные - вы не можете передать право собственности, потому что std :: vector
гарантирует, что он уничтожит свое содержимое при выходе из области видимости. В этом случае используйте алгоритм std :: copy ()
.
Если ваш вектор содержит значения, вы можете только копировать их (что происходит, когда вы вызываете std :: copy, std :: swap и т. д.). Если вы храните непримитивные объекты в векторе и не хотите их копировать (и использовать в другой структуре данных), подумайте о хранении указателей
У вас работает что-то подобное?
int main()
{
double *data = 0;
{
vector<double> foo;
// insert some elements to foo
data = new double[foo.size()];
std::copy(foo.begin(), foo.end(), &data[0]);
}
// Pass data to Matlab function.
delete [] data;
return 0;
}
Поскольку вы не хотите копировать данные между контейнерами, но хотите передать право собственности на данные между контейнерами, я предлагаю использовать контейнер интеллектуальных указателей следующим образом.
void f()
{
std::vector<boost::shared_ptr<double> > doubles;
InitVector(doubles);
std::vector<boost::shared_ptr<double> > newDoubles(doubles);
}
Вы действительно можете ' • передавать право собственности на данные между стандартными контейнерами, не копируя их, поскольку стандартные контейнеры всегда копируют данные, которые они инкапсулируют. Если вы хотите минимизировать накладные расходы на копирование дорогостоящих объектов, то рекомендуется использовать умный указатель с подсчетом ссылок, чтобы обернуть вашу дорогостоящую структуру данных. boost :: shared_ptr
подходит для этой задачи, так как сделать его копию довольно дешево.