c++ - 查找奇 vector 元素 C++

标签 c++ vector

所以我写了一个小程序来计算 A[0]*B[0] - A[1]*B[1] - A[2]*B[2] - ... - A [n-1]*B[n-1] 使用 vector 。

#include <iostream>
#include <string>
#include <vector>

using namespace std;

double CalcProduct(vector<double> v1,vector<double> v2){

    size_t size; int i = 0;
    vector<double> product;

    double input, input2;

    cout << "Enter vector size: ";
    cin >> size;

    cout << "Enter values for first vector: ";
    while (i++ != size) {
        cin >> input;
        v1.push_back(input);
    }
    i = 0;
    cout << "Enter values for second vector: ";
    while (i++ != size) {
        cin >> input2;
        v2.push_back(input2);
    }

    double result = 0.0;
    if (size >= 1) {
        result += v1[0] * v2[0];
        for (int i = 1; i < size; ++i)
            result -= v1[i] * v2[i];
    }

    cout << "\nThe 'happy' product of both vectors is: " << result << endl;
}

int main()
{
    vector<double> v1;
    vector<double> v2;

    CalcProduct(v1,v2);

    return 0;
}

但是,如果我想计算 A[1]*B[1] - A[3]*B[3] - A[5]*B[5] - .... ?我尝试在 v1v2 中添加 +1,然后它们在 result 中求和,但我的逻辑似乎是错误的。示例输入: 5个 1 2 3 4 5 4 5 6 7 5 预期输出:-18

最佳答案

你在这个循环中进行计算

for(int i = 1; i < size; ++i)
    result -= v1[i] * v2[i];

因此,您可以跳转 2,而不是递增 i:

for(int i = 1; i < size; i+=2) {
    result -= v1[i] * v2[i];
}

请注意,检查您是否没有越界是一个好习惯,我也喜欢用 { 包围 for 循环体} 即使它包含一行。

编辑:我没有注意到您已经在循环之前添加了第一个元素,您可以通过从 i=3 而不是 1 开始轻松解决此问题。

关于c++ - 查找奇 vector 元素 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28083887/

相关文章:

c++ - 通过 C++ 中的 udp 套接字将派生类对象从一个进程发送到另一个进程

c++ - 程序在错误的位置查找 libstdc++.so.6,似乎忽略了 LD_LIBRARY_PATH

c++ - QString 与 qstring.h

C++ 比较指向不同类型的指针?

r - 在 R 中提取括号中的文本

C++ - 在 STL vector 中操作对象?

c++ - 比较 vector 迭代器和整数

c++ - std::nothrow 未按预期工作 - 条件始终为假

c++ - 调试断言失败 - vector 迭代器不兼容

c++ - 为什么 `std::set::erase(const key_type&)` 返回 `size_type` 而不是 `bool` ?