vector里面一段连续的数 怎么把他输入到不同的vector里面

qq_38552681 2017-09-21 11:31:22
如 vector(1,2,3,4,5,6 , 50,51,52,53,54,55,56, 90,91,92,93,94,95,96)怎么把这个vector 分为三个
vector1(1,2,3,4,5,6 ) vector2( 50,51,52,53,54,55,56) vector3(90,91,92,93,94,95,96) 请大神指点 O(∩_∩)O谢谢
...全文
598 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
玻璃心orz 2018-01-29
  • 打赏
  • 举报
回复
引用
循环写的有点乱了,修正下 C/C++ code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 std::vector<int>::iterator iterRes = resVector.begin(); std::vector<int> insert; while(iterRes != resVector.end()) { std::vector<int>::iterator iterTmp = iterRes; iterRes++; if(iterRes != resVector.end() && *iterRes - *iterTmp == 1) { insert.push_back(*iterTmp); } else if(iterRes != resVector.end() && *iterRes - *iterTmp != 1) { insert.push_back(*iterTmp); allVectors.push_back(insert); insert = std::vector<int>(); } else if(iterRes == resVector.end()) { insert.push_back(*iterTmp); allVectors.push_back(insert); } }
你好,请问如果有一段乱序数据,挨个判断,往不同的vector里面添加,应该怎么做?求大神指点
qq_38552681 2017-09-21
  • 打赏
  • 举报
回复
引用 1 楼 starytx 的回复:
仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
如果里面 每段的数不定呢 而且不止三段
starytx 2017-09-21
  • 打赏
  • 举报
回复
仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
qq_38552681 2017-09-21
  • 打赏
  • 举报
回复
引用 12 楼 sty_app 的回复:
循环写的有点乱了,修正下

	std::vector<int>::iterator iterRes = resVector.begin();
	std::vector<int> insert;
	while(iterRes != resVector.end())
	{
		std::vector<int>::iterator iterTmp = iterRes;
		iterRes++;
		if(iterRes != resVector.end() && *iterRes - *iterTmp == 1)
		{
			insert.push_back(*iterTmp);
		}
		else if(iterRes != resVector.end() && *iterRes - *iterTmp != 1)
		{
			insert.push_back(*iterTmp);
			allVectors.push_back(insert);
			insert = std::vector<int>();
		}
		else if(iterRes == resVector.end())
		{
			insert.push_back(*iterTmp);
			allVectors.push_back(insert);
		}
	}
O(∩_∩)O谢谢大神 问题解决了
sty_app 2017-09-21
  • 打赏
  • 举报
回复
循环写的有点乱了,修正下

	std::vector<int>::iterator iterRes = resVector.begin();
	std::vector<int> insert;
	while(iterRes != resVector.end())
	{
		std::vector<int>::iterator iterTmp = iterRes;
		iterRes++;
		if(iterRes != resVector.end() && *iterRes - *iterTmp == 1)
		{
			insert.push_back(*iterTmp);
		}
		else if(iterRes != resVector.end() && *iterRes - *iterTmp != 1)
		{
			insert.push_back(*iterTmp);
			allVectors.push_back(insert);
			insert = std::vector<int>();
		}
		else if(iterRes == resVector.end())
		{
			insert.push_back(*iterTmp);
			allVectors.push_back(insert);
		}
	}
sty_app 2017-09-21
  • 打赏
  • 举报
回复
环境:VS2008

#include "stdafx.h"
#include <list>
#include <vector>

int _tmain(int argc, _TCHAR* argv[])
{
	std::list<std::vector<int> > allVectors;

	std::vector<int> resVector;
	// 测试数据,3组
	for(int i = 100; i < 105; i++)
	{
		resVector.push_back(i);
	}
	for(int i = 120; i < 125; i++)
	{
		resVector.push_back(i);
	}
	for(int i = 150; i < 155; i++)
	{
		resVector.push_back(i);
	}
	
	std::vector<int>::iterator iterRes = resVector.begin();
	std::vector<int> insert;
	do
	{
		if(iterRes !=resVector.end())
		{
			std::vector<int>::iterator iterTmp = iterRes;
			iterRes++;
			if(iterRes != resVector.end() && *iterRes - *iterTmp == 1)
			{
				insert.push_back(*iterTmp);
			}
			else if(iterRes != resVector.end() && *iterRes - *iterTmp != 1)
			{
				insert.push_back(*iterTmp);
				allVectors.push_back(insert);
				insert = std::vector<int>();
			}
			else if(iterRes == resVector.end())
			{
				insert.push_back(*iterTmp);
				allVectors.push_back(insert);
			}
		}
	}while(iterRes != resVector.end());

	// 循环结束,所有的分组均保存在allVectors中

	return 0;
}
sty_app 2017-09-21
  • 打赏
  • 举报
回复
引用 4 楼 qq_38552681 的回复:
[quote=引用 3 楼 starytx 的回复:] [quote=引用 2 楼 qq_38552681 的回复:] [quote=引用 1 楼 starytx 的回复:] 仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
如果里面 每段的数不定呢 而且不止三段[/quote]不定总有规则吧,根据你的规则往里放就行了[/quote] 大概是这样 (264-326 , 574-627 ,952-999, 1251-1301, 1611-1679, 1923-1978) 六段连续的数 我想根据他们的间隔大于一来分 就是不知道怎么分 麻烦你指点下 谢谢 [/quote] 1.创建一个std::list<std::vector<int> > 用来存储所有的分段数组 2.创建一个vector存储第一段数据 3.对目标vector进行遍历,当下一个节点中的数减去当前节点中的数据大于1时,保存上一个vector至list中,并新建一个vector 如果下一个节点的数减去当前节点中的数等于1时,将当前节点中的值存入当前的vector中 经过多次循环,std::list<std::vector<int> >中保存了所有的分段数据,每个分段中的数字都 是相邻为1的数字
qq_38552681 2017-09-21
  • 打赏
  • 举报
回复
引用 9 楼 sty_app 的回复:
[quote=引用 4 楼 qq_38552681 的回复:] [quote=引用 3 楼 starytx 的回复:] [quote=引用 2 楼 qq_38552681 的回复:] [quote=引用 1 楼 starytx 的回复:] 仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
如果里面 每段的数不定呢 而且不止三段[/quote]不定总有规则吧,根据你的规则往里放就行了[/quote] 大概是这样 (264-326 , 574-627 ,952-999, 1251-1301, 1611-1679, 1923-1978) 六段连续的数 我想根据他们的间隔大于一来分 就是不知道怎么分 麻烦你指点下 谢谢 [/quote] 1.创建一个std::list<std::vector<int> > 用来存储所有的分段数组 2.创建一个vector存储第一段数据 3.对目标vector进行遍历,当下一个节点中的数减去当前节点中的数据大于1时,保存上一个vector至list中,并新建一个vector 如果下一个节点的数减去当前节点中的数等于1时,将当前节点中的值存入当前的vector中 经过多次循环,std::list<std::vector<int> >中保存了所有的分段数据,每个分段中的数字都 是相邻为1的数字 [/quote] 大神其实我想表达的也是这个意思 就是我对vector不熟悉刚接触不知道怎么去用代码的方式表达出来 还希望大神 你帮下忙 分享下代码 非常感谢大神了
lin5161678 2017-09-21
  • 打赏
  • 举报
回复
参数是两个 迭代器 怎么确定是哪两个迭代器自己想办法
sty_app 2017-09-21
  • 打赏
  • 举报
回复
引用 4 楼 qq_38552681 的回复:
[quote=引用 3 楼 starytx 的回复:] [quote=引用 2 楼 qq_38552681 的回复:] [quote=引用 1 楼 starytx 的回复:] 仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
如果里面 每段的数不定呢 而且不止三段[/quote]不定总有规则吧,根据你的规则往里放就行了[/quote] 大概是这样 (264-326 , 574-627 ,952-999, 1251-1301, 1611-1679, 1923-1978) 六段连续的数 我想根据他们的间隔大于一来分 就是不知道怎么分 麻烦你指点下 谢谢 [/quote] 只要大于1就拆分嘛?
qq_38552681 2017-09-21
  • 打赏
  • 举报
回复
引用 7 楼 lin5161678 的回复:
参数是两个 迭代器 怎么确定是哪两个迭代器自己想办法
什么意思 不太懂。。。
qq_38552681 2017-09-21
  • 打赏
  • 举报
回复
引用 5 楼 sty_app 的回复:
[quote=引用 4 楼 qq_38552681 的回复:] [quote=引用 3 楼 starytx 的回复:] [quote=引用 2 楼 qq_38552681 的回复:] [quote=引用 1 楼 starytx 的回复:] 仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
如果里面 每段的数不定呢 而且不止三段[/quote]不定总有规则吧,根据你的规则往里放就行了[/quote] 大概是这样 (264-326 , 574-627 ,952-999, 1251-1301, 1611-1679, 1923-1978) 六段连续的数 我想根据他们的间隔大于一来分 就是不知道怎么分 麻烦你指点下 谢谢 [/quote] 只要大于1就拆分嘛?[/quote] 是的 麻烦 大神指点下 非常感谢
qq_38552681 2017-09-21
  • 打赏
  • 举报
回复
引用 3 楼 starytx 的回复:
[quote=引用 2 楼 qq_38552681 的回复:] [quote=引用 1 楼 starytx 的回复:] 仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
如果里面 每段的数不定呢 而且不止三段[/quote]不定总有规则吧,根据你的规则往里放就行了[/quote] 大概是这样 (264-326 , 574-627 ,952-999, 1251-1301, 1611-1679, 1923-1978) 六段连续的数 我想根据他们的间隔大于一来分 就是不知道怎么分 麻烦你指点下 谢谢
starytx 2017-09-21
  • 打赏
  • 举报
回复
引用 2 楼 qq_38552681 的回复:
[quote=引用 1 楼 starytx 的回复:] 仔细看vector的构造,有一种就是以迭代器范围为参数的, 示例: vector vec1(vec.begin(),vec.begin()+6); vector vec2(vec.begin()+6 ,vec.begin()+12);
如果里面 每段的数不定呢 而且不止三段[/quote]不定总有规则吧,根据你的规则往里放就行了

64,651

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧