加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何初始化用auto关键字声明的循环计数器?

发布时间:2020-12-16 05:53:08 所属栏目:百科 来源:网络整理
导读:这是我的代码: #include iostream#include vectorvoid cumulative_sum_with_decay(std::vectordouble v){ for (auto i = 2; i v.size(); i++) { v[i] = 0.167 * v[i - 2] + 0.333 * v[i - 1] + 0.5 * v[i]; }}void printv(std::vectordouble v){ std::cout
这是我的代码:
#include <iostream>
#include <vector>

void cumulative_sum_with_decay(std::vector<double>& v)
{
    for (auto i = 2; i < v.size(); i++) {
        v[i] = 0.167 * v[i - 2] + 0.333 * v[i - 1] + 0.5 * v[i];
    }
}

void printv(std::vector<double>& v)
{
    std::cout << "{";
    for (auto i = 0; i < v.size() - 1; i++) {
        std::cout << i << ",";
    }
    std::cout << v[v.size() - 1] << "}n";
}

int main()
{
    auto v = std::vector<double>{1,2,3,4,5,6,7,8,9,10};
    cumulative_sum_with_decay(v);
    printv(v);
}

当我尝试编译并运行此程序时,我收到以下警告:

$clang++ -std=c++11 -Wextra foo.cpp && ./a.out
foo.cpp:6:24: warning: comparison of integers of different signs: 'int' and 'std::__1::vector<double,std::__1::allocator<double> >::size_type' (aka 'unsigned long') [-Wsign-compare]
    for (auto i = 2; i < v.size(); i++) {
                     ~ ^ ~~~~~~~~
foo.cpp:14:24: warning: comparison of integers of different signs: 'int' and 'unsigned long'
      [-Wsign-compare]
    for (auto i = 0; i < v.size() - 1; i++) {
                     ~ ^ ~~~~~~~~~~~~
2 warnings generated.
{0,1,8.68781}

如何初始化使用auto声明的这些循环计数器,以便代码是安全的并且没有警告?

请注意,虽然我在这里有一个小向量,但我正在尝试学习如何使用auto编写安全代码,即使向量太大以至于i中的值可能超出整数范围.

解决方法

自动声明的变量的类型是从初始化程序推导出来的.给定2或0它将是int.

您可以使用显式类型化的初始值设定项指定类型.例如

for (auto i = static_cast<decltype(v.size())>(2); i < v.size(); i++) {

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读