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

问题描述 投票:0回答:3

我只是想让你告诉你,我在阅读了许多关于我收到的错误的帖子后写了这篇文章:“从‘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 的值不是正确的吗?我的编译器说“operator<<’ in ‘std::cout << a....'. I would appreciate your feedback on this too.

”不匹配
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;
 }
c++ vector iterator double cout
3个回答
2
投票

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

0
投票

您的代码中有一些错误。 1. 声明了

std::vector<int>
,但使用了
std::vector<double>::iterator
。什么是正确的类型 - int 还是 double? 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());


0
投票

您的代码似乎存在一些问题。迭代器 a、b 和 c 应该用于访问值,而不是直接打印。此外,循环结构导致在每次迭代中打印相同的值。这是更正后的代码:

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

using namespace std;

int main() {
    ifstream ifs("foo.txt");

    // initialize a vector of doubles:
    vector<double> vector1;

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

    int allnumb = vector1.size();

    // Check if the vector is not empty
    if (!vector1.empty()) {
        vector<double>::iterator a = max_element(vector1.begin(), 
vector1.end());
        vector<double>::iterator b = min_element(vector1.begin(), 
vector1.end());
        nth_element(vector1.begin(), vector1.begin() + vector1.size() / 2, 
vector1.end());
        vector<double>::iterator c = vector1.begin() + vector1.size() / 2;

        cout << "Max Element: " << *a << endl;
        cout << "Min Element: " << *b << endl;
        cout << "Median Element: " << *c << endl;
    } else {
        cout << "Vector is empty." << endl;
    }

    return 0;
}

此代码将“foo.txt”中的值读取到向量中,然后分别使用 max 元素、min 元素和第 n 个元素函数查找 max、min 和中值元素。更正后的代码现在可以正确打印最大、最小和中值元素的值。

© www.soinside.com 2019 - 2024. All rights reserved.