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
我需要完成一个简单的任务,这在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