C++ c++;如何使用两个迭代器从向量复制范围
我有一个未编译的示例代码:C++ c++;如何使用两个迭代器从向量复制范围,c++,vector,iterator,copy,C++,Vector,Iterator,Copy,我有一个未编译的示例代码: #include <iostream> #include <vector> using std::endl; using std::cin; using std::cout; using std::vector; int main() { vector<int> vi, seg; vi.push_back(3); vi.push_back(4); vi.push_back(5); vi.
#include <iostream>
#include <vector>
using std::endl; using std::cin; using std::cout;
using std::vector;
int main()
{
vector<int> vi, seg;
vi.push_back(3);
vi.push_back(4);
vi.push_back(5);
vi.push_back(6);
vi.push_back(7);
vector<int>::const_iterator ci_start = vi.begin();
vector<int>::const_iterator ci_actual = vi.begin();
while (ci_actual != vi.end())
{
seg = vi(ci_start, ci_actual);
cout << "......" ;
for (const vector<int>::const_iterator ci = vi.begin();
ci != vi.end(); ++ci)
cout << *ci << " ";
cout << endl;
++ci_actual;
}
}
#包括
#包括
使用std::endl;使用std::cin;使用std::cout;
使用std::vector;
int main()
{
向量vi,seg;
vi.推回(3);
vi.推回(4);
vi.推回(5);
vi.推回(6);
vi.推回(7);
向量::常量迭代器ci_start=vi.begin();
vector::const_迭代器ci_actual=vi.begin();
while(ci_实际值!=vi.end())
{
seg=vi(ci_开始,ci_实际);
cout如果您有编译器错误,请告诉我们它是什么。它看起来像这样:
seg = vi(ci_start, ci_actual);
应该是
vector<int> seg(ci_start, ci_actual);
矢量seg(ci_开始,ci_实际);
并删除main()顶部的seg声明
for循环应该使用seg.begin()/seg.end()。如果要打印段如果出现编译器错误,请告诉我们它是什么。它如下所示:
seg = vi(ci_start, ci_actual);
for (const vector<int>::const_iterator ci = vi.begin(); ci != vi.end(); ++ci)
应该是
vector<int> seg(ci_start, ci_actual);
矢量seg(ci_开始,ci_实际);
并删除main()顶部的seg声明
如果要打印(const vector::const_iterator ci=vi.begin();ci!=vi.end();++ci)的段,for循环应该使用seg.begin()/seg.end()
for (const vector<int>::const_iterator ci = vi.begin(); ci != vi.end(); ++ci)
您在此处声明了一个const const_interator。这意味着,当您试图调用++ci时,编译器会因为您试图修改常量变量而对您大喊大叫。这将修复编译器错误:
for (vector<int>::const_iterator ci = vi.begin(); ci != vi.end(); ++ci)
for(vector::const_迭代器ci=vi.begin();ci!=vi.end();++ci)
for(常量向量::常量迭代器ci=vi.begin();ci!=vi.end();++ci)
您在此处声明了一个const const_interator。这意味着,当您试图调用++ci时,编译器会因为您试图修改常量变量而对您大喊大叫。这将修复编译器错误:
for (vector<int>::const_iterator ci = vi.begin(); ci != vi.end(); ++ci)
for(vector::const_迭代器ci=vi.begin();ci!=vi.end();++ci)
int main()
{
向量vi;
vi.推回(3);
vi.推回(4);
vi.推回(5);
vi.推回(6);
vi.推回(7);
//序列的结尾
向量::迭代器seq_end=vi.begin()+1;
while(seq_end!=vi.end())
{
coutintmain()
{
向量vi;
vi.推回(3);
vi.推回(4);
vi.推回(5);
vi.推回(6);
vi.推回(7);
//序列的结尾
向量::迭代器seq_end=vi.begin()+1;
while(seq_end!=vi.end())
{
coutRe:接下来的问题是如何调用要在大向量的子范围上操作的辅助函数
首先,可能是有用的。被接受的“只需传递一对迭代器”答案正是我要建议的
其次,如果您可以使用boost库,则可能会很有用。re:关于如何调用要在大向量的子范围上操作的辅助函数的后续问题
首先,可能是有用的。被接受的“只需传递一对迭代器”答案正是我要建议的
第二,如果您可以使用boost库,则可能有用。好吧,有两个错误,您解决了一个。谢谢。但我仍然得到:ex.cpp:23:error:passing'const\u gnu\u cxx::\u normal\u iterator'作为'u\u gnu cxx::\u normal\u iterator&\u gnu cxx:::\u normal\u iterator::operator++(运算符++)[with _Iterator=const int*,_Container=std::vector]'丢弃可能由于seg=vi(ci_start,ci_actual)而导致的限定符
Lou在下面指出的行。有两个错误,你解决了一个。谢谢。但我仍然得到:ex.cpp:23:error:passing'constgnu cxx::normaliterator'作为'的'this'参数::normaliterator&gnu cxx::::normal iterator::operator++()[withiterator=const int*,Container=std]'丢弃可能由于您的seg=vi(ci_开始,ci_实际)而导致的限定符
行@Lou在下面指出。在for循环中从向量声明中删除常量后,我再次尝试了你的建议,编译器不再抱怨了。似乎在while循环中继续重新声明向量seg没有问题。变量不应该只声明一次吗?它只是declared一次。循环没有一直声明它——它一直在构造它,但这没关系,因为每次迭代都需要不同的seg。在for循环中从向量声明中删除const
后,我再次尝试了你的建议,编译器不再抱怨了。似乎保持重新声明没有问题在while循环中声明vector seg。变量不应该只声明一次吗?它只声明一次。循环不会一直声明它——它会一直构造它,但这没关系,因为每次迭代都需要一个不同的seg。嗨,我问的不完全是这个。假设vectorvi
有1000万个元素。作为状态在上面的d中,在while循环的每次迭代中,我希望将vi
中的元素作为参数传递,等等。我的问题是:我真的需要为此创建向量seg吗?如果需要,我需要在每次迭代中将元素从vi
复制到seg
,这很昂贵。或者我可以将指针传递到vi
,以避免复制?或者其他解决方案?那么你不需要seg,只需将vi作为常量引用发送给你,什么我问的不完全是这个。假设向量vi
有1000万个元素。如上所述,在while循环的每次迭代中,我想将vi
中的元素作为参数传递。在第一次迭代中:1个元素;在第二次迭代中,两个元素(1st e 2nd),等等。我的问题是:我真的需要为此创建向量seg吗?如果需要,我需要在每次迭代中将元素从vi
复制到seg
,这很昂贵。或者我可以传递指向vi
的指针以避免复制?或者其他解决方案?那么