C++简单的矢量程序中从 int 类型转换为非标量类型

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

本文关键字:类型转换 int 类型 标量 简单 程序 C++      更新时间:2023-10-16

我只是想让你告诉你,我在阅读了许多关于我收到的错误的帖子后写这篇文章:"从'int'到非标量类型的转换。但是对于我自己的程序,我无法应用任何答案来修复它。我希望你们中的任何人都能对以下特定代码给我评论/意见/建议或关注。

    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....'中的"运算符<<"不匹配。我也感谢您对此的反馈。

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和其他函数返回迭代器。然后,使用 * 取消引用这些值以获取它们引用的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。什么是正确的类型 - 整数或双精度?2.max_element(( 和 min_element(( 返回std::vector<Type>::iterator,您正在尝试在右侧取消引用迭代器并将其值分配给左侧的迭代器变量类型。使用int a = *max_element(vector1.begin(), vector1.end());3. nth_element(( 不返回任何内容。使用nth_element(vector1.begin(), vector1.begin() + vector1.size()/2, vector1.end());