通过引用std :: inner_product传递迭代器

时间:2015-05-20 05:34:48

标签: c++ c++11

考虑以下情况:

std::vector<int> a {1, 2, 3};
std::vector<int> b {1, 2, 3, 4};
auto it = b.begin();
auto res = std::inner_product(a.begin(), a.end(), it, 0); (*)

有没有办法将it传递给std::inner_product,以便在(*)完成执行后it将指向4.(即*it == 4)?

2 个答案:

答案 0 :(得分:2)

假设scanner.next();实现以线性方式递增第二个迭代器,您可以编写一个scanner.nextLine();的包装类,它可以传递给std::inner_product并且这个包装器(更新迭代器)间接地将指向一个新的位置。

但强烈建议不要采用这种方式,因为:

  1. 您正在对实施做出假设。
  2. 有更好的方法来增加迭代器。 例如,std::vector<int>::iterator应该是首选 为你的情况。

答案 1 :(得分:0)

正如Mohit Jain所说,没有标准保证的可移植方式来做到这一点,因为您必须假设$("#grade_contamina a").on("click", function() { console.log($(this).parents("li")[0].id) });实施恰好将<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div id="grade_contamina"> <ul id="ul_element"> <!---My first li---> <li id="first_id"> <p> Apple </p> <!---Button for apple----> <span class="fruits" id="btn_apple"> <a class="btn_send_once">Send to Students</a> <a class="btn_delete_once" >Delete</a> <a class="btn_download_once">Download</a> </span> </li> <!---My second li---> <li id="second_id"> <p> Grapes </p> <!---Button for grapes----> <span class="fruits" id="btn_grapes"> <a class="btn_send_once">Send to Students</a> <a class="btn_delete_once" >Delete</a> <a class="btn_download_once">Download</a> </span> </li> </ul> </div>留在您想要的地方,但您不需要写一个单独的包装类:

inner_product

(ideone.com上的Here