Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.04.2012, 17:46   #1
rafala
Новичок
Джуниор
 
Регистрация: 06.04.2012
Сообщений: 2
По умолчанию vector insert

Есть фрагмент кода с использованием MFC:
Код:
void GetFirstDiff(const CArray<double>& arSrc, CArray<double>& arDest)
{       
        CArray<double> arTmp;
        arTmp.SetSize(arSrc.GetCount());
        for (int nPos = 1; nPos < arSrc.GetCount(); nPos++)
        {               
                if(nPos + 1 > arSrc.GetCount() - 1)
                        continue;
                double ndY = arSrc[nPos + 1] - arSrc[nPos];                     
                arTmp.SetAt(nPos, ndY);
        }
        arDest.RemoveAll();  
        arDest.Copy(arTmp);
        arTmp.RemoveAll();
}
Хочу переписать его под православный g++. Но только начала разбираться с векторами, и не знаю чем заменить SetAt(nPos, ndY), если я правильно понял, то альтернативой будет функция insert, но как приводить тип счетчика к итератору?
rafala вне форума Ответить с цитированием
Старый 06.04.2012, 18:18   #2
rafala
Новичок
Джуниор
 
Регистрация: 06.04.2012
Сообщений: 2
По умолчанию

Код:
void GetFirstDiff(const vector<double>& arSrc, vector<double>& arDest)
{       
        vector<double> arTmp;
        arTmp.resize(arSrc.size());
        int nPos = 1;
        for (vector<double>::iterator nPosIndex = arTmp.begin(); nPos < arSrc.end(); nPos++)
        {      
                nPos++         
                if(nPos + 1 > arSrc.size() - 1)
                        continue;
                double ndY = arSrc[nPos + 1] - arSrc[nPos];                     
                arTmp.insert(nPosIndex, ndY);
        }
        arDest.clear();  
        arDest.swap(arTmp);
        arTmp.clear();
}
Не могу разобраться что здесь не так.
rafala вне форума Ответить с цитированием
Старый 06.04.2012, 19:10   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от rafala Посмотреть сообщение
Код:
void GetFirstDiff(const vector<double>& arSrc, vector<double>& arDest)
{       
        vector<double> arTmp;
        arTmp.resize(arSrc.size());
        int nPos = 1;
        for (vector<double>::iterator nPosIndex = arTmp.begin(); nPos < arSrc.end(); nPos++)
        {      
                nPos++         
                if(nPos + 1 > arSrc.size() - 1)
                        continue;
                double ndY = arSrc[nPos + 1] - arSrc[nPos];                     
                arTmp.insert(nPosIndex, ndY);
        }
        arDest.clear();  
        arDest.swap(arTmp);
        arTmp.clear();
}
Не могу разобраться что здесь не так.
При добавлении/удалении элементов из вектора, вектор "сжимается"/"расширяется". Соответственно, все старые указатели/итераторы на его элементы становятся невалидными.

/зы: в код не вникал.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
<vector> dcPEOP Общие вопросы C/C++ 2 26.01.2012 11:28
класс Vector fclmhooligan Общие вопросы по Java, Java SE, Kotlin 3 05.04.2011 02:40
vector NiCola999 Помощь студентам 5 26.02.2010 08:37
Вопрос про vector функцию insert Dimedrolum Общие вопросы C/C++ 2 18.09.2009 22:51
Вопрос по <vector> kezman Общие вопросы C/C++ 1 13.08.2008 21:48