将向量传递到C 功能时的类型麻烦

Trouble with types when passing vector to function in c++

本文关键字:类型 麻烦 功能 向量      更新时间:2023-10-16

我正在开始C 课程以前从未在语言上做过任何事情,我对矢量很困惑。我做了一个玩具示例,我不太明白为什么双打了我将其放入向量成为矢量。这是代码:

#include <iostream>
#include <vector>
using namespace std;
vector<double> a;
void func(vector<double> *);
int main()
{
    for (int i = 0; i < 100; i++)
    {
        a.push_back(double(i));
    }   
    func(&a);
    return 0;
}   
void func(vector<double> *vec)
{
    cout << double(vec[0]) << endl;
    return; 
}  

最终给我这个错误:错误:不能没有将"向量"转换为"双" 转换操作员而且我不知道那意味着什么。这里到底发生了什么,我该如何将矢量投入双重?

您不需要使用指针*std::vector混合。

方法1(不建议):

更改

cout << double(vec[0]) << endl;

to

cout << double((*vec).at(0)) << endl;

方法2:

  1. 更改

    void func(vector<double> *vec)
    

    to

    void func(vector<double> vec)
    

    void func(const vector<double> &vec)
    
  2. 更改

    func(&a);
    

    to

    func(a);
    

实际错误的原因更多是由于对指针的误解而不是向量。问题是您将指针传递给向量。如果您想使用向量本身,那么您将执行:

cout << (*vec)[0] << endl;

*将取消指针以将实际的向量实例获取,而不是将索引置于您之前正在做的地址。

但是,正如另一个答案中指出的那样,仅通过参考(或更好的是const参考)通过矢量是更安全的:

void func(const vector<double>& vec)
{
    cout << vec[0] << endl;
    return; 
}

然后致电为:

func(a);

使用 vectors的另一种方法是这样的 std::vector< TYPE >::const_iterator;

#include <iostream>
#include <vector>
double func(std::vector<double>::const_iterator iter);

int main()
{
    std::vector<double> vec;
    for (double i = 0.0; i < 1; i += 0.1){
        vec.push_back(i);
    }
    std::cout<< func(vec.begin()+3) << " "
             << func(vec.begin()+6) << std::endl;
    return 0;
}  
double func(std::vector<double>::const_iterator iter){
    return *iter;
}

输出;

0.3 0.6