我发现了将向量范围移动到另一个向量的几页,但是我正在努力使其工作。
我想将元素从sourceVect
移到destVect
,将sourceVect[1]
到sourceVect[1+numToCopy]
之间的元素移到sourceVect的开头。我尝试通过以下方式进行此操作:
vector<int> destVect;
vector<int> sourceVect = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int numToCopy = 7;
vector<int>::iterator itSource = sourceVect.begin();
vector<int>::iterator itSourceEnd = sourceVect.begin();
advance(itSource, 1);
advance(itSourceEnd, 1+numToCopy);
std::copy(itSource, itSourceEnd, destVect.begin()); //copy(first,last,output vector ite)
for (vector<int>::iterator it = destVect.begin(); it != destVect.end(); ++it)
cout << ' ' << *it;
但是我收到调试声明失败,向量迭代器+偏移超出Visual Studio的范围。请注意,我只是在Visual Studio 2015中进行尝试,最后必须在C ++ 98中实现mbed,这意味着我不能使用std::next
。
答案 0 :(得分:1)
std::copy()
不会在目标容器中创建新元素。这意味着您需要创建正确大小的destVect
:
vector<int> sourceVect = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
vector<int> destVect(sourceVect.size() - 1);
如果无法使用正确的尺寸创建它,请稍后在您知道尺寸的位置重新调整尺寸:
destVect.resize(sourceVect.size() - 1);
您现在可以复制:
copy(sourceVect.begin() + 1, sourceVect.end(), destVect.begin());
但是,您只需要创建具有正确内容的destVect
。您无需手动复制任何内容:
vector<int> sourceVect = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
vector<int> destVect(sourceVect.begin() + 1, sourceVect.end());
这是最快的方法,而且(也许更重要的是)它不容易出错。如果执行std::copy
,但目标容器的大小不够大,则最终将写入未分配的内存中(缓冲区溢出。)
答案 1 :(得分:1)
<div class="box-body table-responsive">
<table id="Slider_table" class="table table-bordered table-hover">
<thead>
<tr>
<th>ID</th>
<th>Title</th>
<th>item_Price</th>
<th>Description</th>
<th>Status</th>
<th>Action</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div><!-- /.box-body -->
一直支持$(document).ready(function() {
$("#Slider_table").dataTable( {
"bProcessing": true,
"bServerSide": true,
"sAjaxDataProp": "data",
"fnServerData": function(sSource, aoData, fnCallback){
$.ajax({
"dataType": "json",
"type" : "POST",
"url" : "'.base_url().'Home/items_list/list",
"data" : aoData,
"success" : function(res){
fnCallback(res);
}
});
}
});
});
,您不需要vector::iterator
或+
。最简单的方法是从一对迭代器进行初始化。
next
如果您无法避免将advance
的声明延迟到拥有合适的初始化程序的地步,可以使用 std::vector<int> sourceVect = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
std::vector<int>::iterator first = sourceVect.begin() + 1;
std::vector<int>::iterator last = first + numToCopy;
std::vector<int> destVect(first, last); // contains 2,3,4,5,6,7,8
destVect