【问题标题】:C++ conversion from int to non-scalar type in a simple vector program简单向量程序中从 int 到非标量类型的 C++ 转换
【发布时间】:2015-03-24 10:23:43
【问题描述】:

我只想告诉你,我在阅读了许多关于我收到的错误的帖子后写这篇文章:“从‘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

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


    【解决方案1】:

    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
    

    【讨论】:

      【解决方案2】:

      您的代码中有一些错误。 1. 声明了std::vector&lt;int&gt;,但使用了std::vector&lt;double&gt;::iterator。什么是正确的类型 - int 或 double? 2. max_element() 和 min_element() 返回std::vector&lt;Type&gt;::iterator 并且您试图取消引用右侧的迭代器并将其值分配给左侧的迭代器变量类型。使用int a = *max_element(vector1.begin(), vector1.end()); 3. nth_element() 不返回任何内容。使用nth_element(vector1.begin(), vector1.begin() + vector1.size()/2, vector1.end());

      【讨论】:

        猜你喜欢
        • 2015-03-28
        • 1970-01-01
        • 1970-01-01
        • 2018-10-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多