升序的向量元素[关闭]

Posted

技术标签:

【中文标题】升序的向量元素[关闭]【英文标题】:vector elements in ascending order [closed] 【发布时间】:2014-11-19 22:23:20 【问题描述】:

我想写一个布尔函数来查看向量中的元素是否按升序排列。 到目前为止我的代码:

bool if_sorted(vector<int>& v) 
int i;
for (; i < v.size(); i++) 
    if(v[i] < v[i + 1])
        break;
     else 
        return false; 

if(v[i] == v.size())
    return true;

在 main() 函数中,我只是用 if_sorted() 函数输入向量 an 的元素,我想查看这些值是否按升序排序。

如何在没有 is_sorted 之类的函数的情况下编写这个布尔函数,或者修改我现有的代码?

【问题讨论】:

1.你忘了说一个问题。 2.你忘了初始化i 看看:en.cppreference.com/w/cpp/algorithm/is_sorted 我不想使用 is_sorted 或其他函数。仅来自 iostream 库。 i 在 for 循环中被初始化。 @user3653164 除了 iostream 什么都不使用?因为作业?就个人而言,如果您只是阅读它,请仅存储最后一个值并检查(prev&lt;curval)。存储向量是浪费内存和时间。 您可以通过多种方式编写代码。如果你想让它工作,你可以先仔细查看if (v[i] &lt; v[i+1]),想一想,然后意识到为什么你的代码不能工作。 【参考方案1】:
bool if_sorted(vector<int>& v) 

  for (int i = 0; i < v.size() - 1; i++) 
     if(v[i] > v[i + 1])
        return false; 
  
  return true;

【讨论】:

【参考方案2】:

怎么样,不使用std::is_sorted

Live On Coliru

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

template <typename Container, 
         typename It = typename Container::const_iterator, 
         typename T = typename std::iterator_traits<It>::value_type>
bool if_sorted(Container const &container) 
    using std::begin;
    using std::end;

    It l(end(container));
    return l == std::adjacent_find(begin(container),l,std::greater_equal<T>());


int main()

    std::vector<int> v(10);
    do    std::generate_n(v.begin(), v.size(), rand);
    while (!if_sorted(v));

    std::cout << "Yay, found a vector that was accidentally sorted: \n";
    std::copy(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout, " "));

打印随机、排序的 10 个整数序列,例如

Yay, found a vector that was accidentally sorted: 
338521972 564591732 631716774 818567430 923731840 1036769782 1094628595 1228665979 1863863464 2024865477

【讨论】:

以上是关于升序的向量元素[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在函数中传递向量元素[关闭]

对向量元素进行排序[关闭]

从向量结构中删除元素[关闭]

找到向量的最小元素[关闭]

MATLAB 常用数据处理命令

有没有办法访问/取消引用并查找存储在双指针向量中的元素的值? [关闭]