Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将向量传递给c+中的函数时,类型出现问题+; 我开始了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; 载体a; void func(向量*); int main() { 对于(int i=0;i_C++_Vector - Fatal编程技术网

将向量传递给c+中的函数时,类型出现问题+; 我开始了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; 载体a; void func(向量*); int main() { 对于(int i=0;i

将向量传递给c+中的函数时,类型出现问题+; 我开始了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; 载体a; void func(向量*); int main() { 对于(int i=0;i,c++,vector,C++,Vector,您不需要将指针*与std::vector混合使用 方法1(不推荐): 改变 cout << double(vec[0]) << endl; 到 实际错误的原因更多地是由于对指针而不是向量的误解。问题是您正在将指针传递给向量。如果要使用向量本身,请执行以下操作: cout << (*vec)[0] << endl; 然后呼叫: func(a); 另一种使用向量的方法是使用std::vector::const_迭代器,如下所示 #include

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

方法1(不推荐): 改变

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


实际错误的原因更多地是由于对指针而不是向量的误解。问题是您正在将指针传递给向量。如果要使用向量本身,请执行以下操作:

cout << (*vec)[0] << endl;
然后呼叫:

func(a);

另一种使用
向量的方法是使用
std::vector::const_迭代器,如下所示

#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;
}

哦,好极了,这很好用,但为什么这样做呢?我认为向量只是可以轻松调整大小的数组,这是错误的吗?@user1023465将指针
*
std::vector
@user1023465更新的答案混合使用是一种糟糕的做法。在堆栈上传递一个vec是一个非常糟糕的主意。
vector
应该是
const vector&vec
@user1023465“我认为向量只是可以轻松调整大小的数组,这是错误的吗?”--是的,完全错误。向量是一个对象实例。
void func(const vector<double> &vec)
func(&a);
func(a);
cout << (*vec)[0] << endl;
void func(const vector<double>& vec)
{
    cout << vec[0] << endl;
    return; 
}
func(a);
#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