c ++ std::vector:在向量位置求和其先前值

c++ std::vector: sum in a vector position its previous value

我需要完成一个简单的任务,这在c++语言中似乎是被禁止的。

我有一个简单的std::vector<double> a{1.,2.,3}我想做这个简单的事情:

for(int i=0; i<a.size();i++)
   a[i]=a[i]+0.1; //or a[i]+=0.1;

或者,很可能,用指针:

for (auto it = a.cbegin(); it != a.cend(); ++it)
    *it=*it+0.1;

如何做到不编译出错?谢谢

std::vector::cbegin() returns 只读迭代器。使用 begin()end() 而不是 cbegin()cend()。也不要忘记声明 myvector.

std::vector<double> myvector = a;

for (auto it = myvector.begin(); it != myvector.end(); ++it)
    *it=*it+0.1;

您也可以使用基于范围的 for 循环来实现

for(auto & e: a) e += 0.1;

可以使用foreach算法和lambda表达式:

std::for_each(a.begin(), a.end(), [](double &d){ d += 0.1; });

我在这个 for 循环中没有看到错误

for(int i=0; i<a.size();i++)
   a[i]=a[i]+0.1;

除了编译器可以发出警告,指出在循环条件中比较有符号整数和无符号整数。

你可以这样写循环

for( std::vectpr<double>::size_type i=0; i < a.size(); i++ )
   a[i] = a[i]+0.1;

或者就像

for( size_t i=0; i < a.size(); i++ )
   a[i] = a[i]+0.1;

在这个for循环中

for (auto it = myvector.cbegin(); it != myvector.cend(); ++it)
    *it=*it+0.1;

您使用的 std::vector<double>::const_iterator 可能无法用于更改向量的元素。

您可以编写一个基于范围的 for 循环,例如

for ( auto &item : myvector ) item += 0.1;

前提是myvector不是常量对象或对常量对象的引用

这是一个简单的演示程序。

#include <iostream>
#include <vector>

int main() 
{
    std::vector<double> v = { 1., 2., 3. };
    
    for ( const auto &item : v ) std::cout << item << ' ';
    std::cout << '\n';
    
    for ( auto &item : v ) item += 0.1;
    
    for ( const auto &item : v ) std::cout << item << ' ';
    std::cout << '\n';
    
    return 0;
}

它的输出是

1 2 3 
1.1 2.1 3.1