获取除第一个元素以外的所有元素作为单独的向量 我试图在C++中编写一个基本的命令行程序。虽然代码的其余部分可能也有很多问题,但我现在面临的问题是:我已经将输入的行分割成几段,但我不知道如何获取除第一行之外的所有内容,以便将其作为命令的参数列表传递给下一行

获取除第一个元素以外的所有元素作为单独的向量 我试图在C++中编写一个基本的命令行程序。虽然代码的其余部分可能也有很多问题,但我现在面临的问题是:我已经将输入的行分割成几段,但我不知道如何获取除第一行之外的所有内容,以便将其作为命令的参数列表传递给下一行,c++,c++11,vector,C++,C++11,Vector,如果这是Ruby,我会这样做,parts是命令的空格分隔参数数组: command = parts[0] args = parts[1..-1] 其中,parts是以空格分隔的位数组 TL;DR:如何获取向量中除第一个元素以外的所有元素 如果使用另一种类型使它更容易,请随意说——我想我在移植它时不会有那么多麻烦 我尝试过使用deque,但我不想修改部分,只想得到它的一部分。我也在这个网站上搜索过,但所有出现的问题要么是相关的,但以一种我无法使用的方式解决,要么是我宁愿避免的真正的黑客解决方法的

如果这是Ruby,我会这样做,
parts
是命令的空格分隔参数数组:

command = parts[0]
args = parts[1..-1]
其中,
parts
是以空格分隔的位数组

TL;DR:如何获取
向量
中除第一个元素以外的所有元素

如果使用另一种类型使它更容易,请随意说——我想我在移植它时不会有那么多麻烦

我尝试过使用
deque
,但我不想修改
部分,只想得到它的一部分。我也在这个网站上搜索过,但所有出现的问题要么是相关的,但以一种我无法使用的方式解决,要么是我宁愿避免的真正的黑客解决方法的开始,要么是完全无关的


另外,我没有
使用名称空间std
,但是
std::
很难输入,所以我在这里省略了它。如果适用,请在您的答案中提供

我刚开始(C++),所以请提供一个解释和你的答案。< /P> TL;DR:如何获得向量的所有元素,除了第一个元素

如果希望向量包含该值,请执行以下操作:

std::vector<int> parts = ...;
std::vector<int> args(parts.begin() + 1, parts.end());
std::向量部分=。。。;
std::vector args(parts.begin()+1,parts.end());

如果只想访问向量元素,则从
部分开始。开始()+1
直到
部分。结束()

最惯用的方法是使用迭代器,并使函数接受如下迭代器:

template<typename It>
void func(It begin, It end) { ... }

你想去掉向量的第一个元素吗?或者你想要另一个向量,它除了第一个元素外,还有相同的元素?还是要传递特定范围的元素?@不,我不想删除元素--我想得到第一个元素(很简单;
部分[0]
),其余的(我想不出来)。用你的话来说:“另一个向量除了第一个元素外,其他元素都是相同的”虽然这是一个有趣的练习,但你可能希望在你的平台上查找一个库,它将为你处理命令行参数(例如Linux上的getopt())。@Andre Oh,这就是:一个练习。我想重新学习C++,所以我尽量避免任何非标准的库。哦,我完全错过了文档中的构造函数。我要试试这个,如果成功了,就接受它。据我所知,这是成功的!我要把它写进我的密码,祈祷它能起作用。感谢您的帮助:D@QPaysTaxes:但别忘了检查向量是否为空,否则会出现未定义的行为。最好使用
args(std::next(begin(parts)、end(parts))
,这样它也可以与
std::list
和C-array一起使用(后一种情况可能需要
std:
限定或使用指令)@celtschk:请澄清一下您的评论;它将是UB,因为如果begin()为空,则等于end(),如果您在begin()之后使用begin()获得下一个迭代器+1,您将超出iterable范围。我想要一个向量,因为它更便于我使用,特别是在特定索引处获取内容。@QPaysTaxes您仍在使用向量,您只需传递该向量的迭代器,而不是向量本身。@QPaysTaxes:向量迭代器是随机访问迭代器,因此它们支持indi例如,在
func
中,您可以使用
begin[2]
访问子序列的第三个元素(假设存在)。当然,这会限制您的函数在随机访问interator(向量、deque和数组)上的使用,但这并不一定是错的;几个标准库函数也会这样做。主要区别在于,对于迭代器,您不复制元素,而是访问原始向量中的元素。@celtschk哦,我明白了!这很有意义。似乎我需要做更多的研究。
func(begin(vector) + 1, end(vector));