在一个简单的向量程序中从 int 到非标量类型的 C++ 转换

C++ conversion from int to non-scalar type in a simple vector program

我只是想让你告诉你,我在阅读许多 post 关于我遇到的错误的文章后写了这篇文章 post:“从‘int’到非标量的转换类型。”但是对于我自己的程序,我无法应用任何答案来修复它。希望大家对下面的具体代码给予comment/opinion/suggestion或者关注。

    vector<double>::iterator a = *max_element(vector1.begin(), vector1.end());
    vector<double>::iterator b  = *min_element(vector1.begin(), vector1.end());
    vector<double>::iterator c  = *(nth_element(vector1.begin(), vector1.begin() + vector1.siz

还有最后一个小问题:下面的方法分别打印出变量a、b、c的值不是正确的吗?我的编译器说在‘std::cout << a....’中没有匹配‘operator<<’。我也非常感谢您对此的反馈。

cout << a << b << c << endl;

非常感谢! 我会一直关注这个直到收到你的回复。

以下是我的代码供大家参考

 #include <iostream>
 #include <fstream>
 #include <algorithm>
 #include <vector>

 using namespace std;

int main(){

ifstream ifs("foo.txt");


//initiailize a vector of integers:
vector<int> vector1;

double d;
while(ifs >> d)
{
    vector1.push_back(d);
}

int allnumb = vector1.size();

for(int i = 0; i < allnumb; i++){

    vector<double>::iterator a = *max_element(vector1.begin(), vector1.end());
    vector<double>::iterator b  = *min_element(vector1.begin(), vector1.end());
    vector<double>::iterator c  = *(nth_element(vector1.begin(), vector1.begin() + vector1.size()/2, vector1.end()));
    cout << a << b << c << endl;

    }

   return 0;
 }

max_element 和其他函数 return 迭代器。然后,您使用 * 取消引用它们以获取它们引用的 int 值,最后尝试使用这些 int 值来初始化不同的迭代器类型。这毫无意义,因此出现了第一个错误。

然后您尝试打印不可打印的迭代器,因此出现第二个错误。

也许您想要以下值:

int a = *max_element(...);
int b = *min_element(...);
int c = *nth_element(...);
cout << a << ' ' << b << ' ' << c << endl; // add spaces for readability

或者您可能需要正确类型的迭代器:

vector<int>::iterator a = max_element(...);
auto b = min_element(...);  // a more convenient alternative, since C++11
auto c = nth_element(...);
cout << *a << ' ' << *b << ' ' << *c << endl; // dereference to print the values

您的代码中存在一些错误。 1.声明了std::vector<int>,但使用了std::vector<double>::iterator。什么是正确的类型 - int 还是 double? 2. max_element() 和 min_element() return std::vector<Type>::iterator 并且您正在尝试在右侧取消引用迭代器并将其值分配给左侧的迭代器变量类型.使用 int a = *max_element(vector1.begin(), vector1.end()); 3. nth_element() 没有 return 任何东西。使用 nth_element(vector1.begin(), vector1.begin() + vector1.size()/2, vector1.end());