C ++查找算法:如何查找元素的最后出现?

时间:2019-10-20 03:25:25

标签: c++ algorithm iterator

我想找到满足给定条件的数组的最后一个元素。作为回报,我想要:

  1. 迭代器,例如,我可以使用std :: distance查找该迭代器与向量开头之间的距离,或者

  2. 直接返回所述元素的位置。

通常,我要解决的是: (i)在向量(max_element)中找到最大元素,并且(ii)在该最大元素之前找到0的 first 出现。

因此在以下示例中:

{0, 10, 20, 0, 5, 50, 0, 70, 10, 0} 
// Get max at position 7, return 0 at position 6

使用算法标头中的max_element后,我尝试使用反向迭代器尝试以下代码段。

auto Itr1 = std::max_element(vect.begin(), vect.end());
auto Itr2 = std::find(Itr1, vect.rend(), [](int i){return i == 0;});

混合反向和正向迭代器很不好玩,没有用。似乎应该有一个更优雅的解决方案。

3 个答案:

答案 0 :(得分:1)

您可以使用标题make_reverse_iterator()中定义的<iterator>。 还要注意,find()接受的第三个参数是将要找到的值。

    std::vector<int> A{ 0, 10, 20, 0, 5, 50, 0, 70, 10, 0 };
    auto itr1 = std::max_element(A.begin(), A.end());
    auto itr2 = std::find(std::make_reverse_iterator(itr1), A.rend(), 0);

答案 1 :(得分:1)

这虽然效果不是很好,但需要另一个向量只有0的向量:

body {

  background:black;

}

#button {

    display: flex;
    font-size: 2.5rem;
    color: white;

  align-items: center;
  justify-content: center;

  width: 250px;
  height: 75px;

    position: relative;
    top: -30%;
    left: calc(50% - 125px);

}

.get-started {
  --borderWidth: 5px;
  position: relative;
  border-radius: var(--borderWidth);
    background-color: #8551FF;
    box-shadow: inset 0 0 0 5px white;
    z-index:1;
}

.get-started h4.part1 {

    color: #FFFFFF;
    font-family: 'Coves Light';
    font-weight: normal;

}

.get-started span.part2 {

    color: #5EFF00;
    font-family: 'Coves';
    font-weight: bold;

}

.get-started:after {
  content: '';
  position: absolute;
}

.get-started:hover:after {
    background: linear-gradient(60deg, #f79533, #f37055, #ef4e7b, #a166ab, #5073b8, #1098ad, #07b39b, #6fba82);
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    border-radius: 2px;
    background-size: 300% 300%;
    animation: frame-enter 1s forwards ease-in-out reverse, gradient-animation 4s ease-in-out infinite;
}

/* motion */
@keyframes gradient-animation {
  0% {
    background-position: 15% 0%;
  }
  50% {
    background-position: 85% 100%;
  }
  100% {
    background-position: 15% 0%;
  }
}

@keyframes frame-enter {
  0% {
    clip-path: polygon(0% 100%, 5px 100%, 5px 5px, calc(100% - 5px) 5px, calc(100% - 5px) calc(100% - 5px), 5px calc(100% - 5px), 5px 100%, 100% 100%, 100% 0%, 0% 0%);
  }
  25% {
    clip-path: polygon(0% 100%, 5px 100%, 5px 5px, calc(100% - 5px) 5px, calc(100% - 5px) calc(100% - 5px), calc(100% - 5px) calc(100% - 5px), calc(100% - 5px) 100%, 100% 100%, 100% 0%, 0% 0%);
  }
  50% {
    clip-path: polygon(0% 100%, 5px 100%, 5px 5px, calc(100% - 5px) 5px, calc(100% - 5px) 5px, calc(100% - 5px) 5px, calc(100% - 5px) 5px, calc(100% - 5px) 5px, 100% 0%, 0% 0%);
  }
  75% {
    -webkit-clip-path: polygon(0% 100%, 5px 100%, 5px 5px, 5px 5px, 5px 5px, 5px 5px, 5px 5px, 5px 5px, 5px 0%, 0% 0%);
  }
  100% {
    -webkit-clip-path: polygon(0% 100%, 5px 100%, 5px 100%, 5px 100%, 5px 100%, 5px 100%, 5px 100%, 5px 100%, 5px 100%, 0% 100%);
  }
}

答案 2 :(得分:0)

一开始错了, 我认为您正在寻找https://angular.io/guide/workspace-config

file.on(data)