gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:32 29 4
gpt4 key购买 nike

这是我的代码:

#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, 2, 3, 4, 5, 6, 7, 8, 8.68781}

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

请注意,虽然我这里有一个小 vector ,但我正在尝试学习如何使用 auto 编写安全代码,即使该 vector 大到 i 中的值也是如此> 可以超出整数范围。

最佳答案

您可以使用“decltype(v.size())”来获取正确的类型。

for (decltype(v.size()) i = 2; i < v.size(); i++) 

关于c++ - 如何初始化用 auto 关键字声明的循环计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50502632/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com