簡體   English   中英

在C ++中迭代向量並動態更改值

[英]Iterating over a vector in C++ and changing the values dynamically

我正在編寫一個c ++方法,該方法采用類型T的向量vec並返回“增量”向量,即在位置i,i> 0處具有元素vec(i)-vec(i-1)的向量,將元素設置為0與1 /相同。

為此,我首先復制向量vec,然后以這種方式進行迭代:

template<class T>
vector<T> delta(vector<T> vec){
    vector<T> result(vec);
    for (typename vector<T>::iterator i = result.end(); i >= result.begin()+1; i--)
        {
            *i = *i - *(std::prev(i));
        }

    result.at(0) = result.at(1);
    return (result);
}

這條線似乎有問題

*i = *i - *(std::prev(i));

我不明白。 如果我將其更改為* i = * i-1,則效果很好。 另一個問題是該程序只是失敗而沒有顯示我錯誤(它彈出一個帶有“ main.exe已停止工作”的窗口。)我正在使用CLion IDE。

PS從主要方面,我正在傳遞帶有雙精度值的初始化向量。

這是未定義的行為。 當將迭代器設置為result.end()時,您是在將終止迭代器解引用到向量,該向量本質上是向量之后緊隨其后的內存區域。 諸如std :: prev或解引用運算符之類的不同函數可能會對此進行不同的處理。 要消除這種現象,請嘗試以下循環:

for (typename std::vector<T>::iterator i = result.end()-1; i >= result.begin()+1; i--) {
         *i = *i - *(i-1);
}

該循環僅從向量中的最后一個有效位置開始(結束迭代器-1)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM