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

时间:2015-03-24 10:23:43

标签: c++ vector iterator double cout

我只是想让你告诉你,在阅读了很多关于我所得到的错误的帖子后,我正在写这篇文章:"从'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&lt;&lt;'中的'operator&lt;&lt;'不匹配一个....&#39 ;.我也非常感谢您对此的反馈。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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());