Я полагаю, вы пришли из C# или Java фона? (отсюда и причина попытки нового все?). То, как вы это сделаете в C ++, будет выглядеть примерно так:
int main() {
// store a vector of minimal structs
std::vector<minimal> vectinheap;
int n = 4;
for (int i = 0; i < n; ++i)
{
int xlocal = i; // set dummy vals for filling vectinheap
int ylocal = -i;
// emplace_back will construct a new item at the end of the vector
vectinheap.emplace_back(xlocal, ylocal);
}
// and now to iterate (range based for loop - best method)
for(auto& value : vectinheap)
{
std::cout << value.getx() << ' ' << value.gety() << std::endl;
}
// the less good way using iterators
for(auto it = vectinheap.begin(); it != vectinheap.end(); ++it)
{
std::cout << it->getx() << ' ' << it->gety() << std::endl;
}
// and using indices if you really must
for(size_t i = 0; i < vectinheap.size(); ++i)
{
std::cout << vectinheap[i].getx() << ' ' << vectinheap[i].gety() << std::endl;
}
}
Однако использование push_back / emplace_back для создания простого POD-массива - очень неэффективный подход. Обычно лучше выделить один раз заранее и просто заполнить данные. Таким образом, вы не будете постоянно задавать вопрос «могу ли я добавить еще один элемент в этот массив, не меняя его размер?» каждая итерация l oop.
int n = 4;
// allocate enough memory for 'n' structs
std::vector<minimal> vectinheap(n);
for (int i = 0; i < n; ++i)
{
int xlocal = i; // set dummy vals for filling vectinheap
int ylocal = -i;
// just use the array brackets to access
vectinheap[i].setvals(xlocal, ylocal);
}