怎样vector内部的Modifiers(功能)进行实现 ?(详细 ! ! !)

在这里插入图片描述

Modifiers(功能实现)

这里主要涉及的就是对于单个元素的操作,主要理解和熟练使用这些操作的作用.
在这里插入图片描述

1.assign

1)通过输入对应元素来改变

用来改变对应vector内部的空间元素值和空间内字节的大小
在这里插入图片描述

	string s("1234");		//创建String类
	vector<char>v(s.begin(), s.end());	//简单的创建赋值

	v.assign(10, 'a');		//将vector内部的空间和对应的字符都发生改变

在这里插入图片描述

2) 通过迭代器来改变

在这里插入图片描述

	string s("1234");		
	vector<char>v(s.begin(), s.end());	

	string s2("abcdef");
	
	v.assign(s2.begin(), s2.end());  //用迭代器来进行元素的输入变化

在这里插入图片描述

2.push_back

在这里插入图片描述

	string s("1234");
	vector<char>v(s.begin(), s.end());

	//对下面的元素进行尾插
	v.push_back('1');
	v.push_back('2');
	v.push_back('3');
	v.push_back('4');
	v.push_back('5');

在这里插入图片描述

3.pop_back

在这里插入图片描述

	v.push_back('1');
	v.push_back('2');
	v.push_back('3');
	v.push_back('4');
	v.push_back('5');

	v.pop_back();	//将尾部的元素删除,执行5次
	v.pop_back();
	v.pop_back();
	v.pop_back();
	v.pop_back();

在这里插入图片描述

4.insert

1)插入单个字符

在这里插入图片描述

v.insert(v.begin(), '0');		//首元素位置插入0

在这里插入图片描述

2)插入多个

在这里插入图片描述

v.insert(--v.end(), 5,'a');		//倒数第二个元素的位置插入5个a

在这里插入图片描述

3)插入对应范围内的字符串

在这里插入图片描述

v.insert(++v.begin(), s2.begin(), s2.end());	//在第二个元素的位置插入s2的整个字符串

在这里插入图片描述

5.erase

1)删除对应位置的字符

在这里插入图片描述

	string s("abcdef");
	vector<char>v(s.begin(), s.end());	

	v.erase(v.begin());		//删除首元素

在这里插入图片描述

2)删除范围内的字符串

在这里插入图片描述

	v.erase(++v.begin(), --v.end());	//删除第二个元素到倒数第二个元素之间的所有元素

在这里插入图片描述
这就是对于内部功能的简单实现,当然还有一个对应的emplace函数,我在下一篇单独写出来

在Qt中,实现ROI(Region of Interest)的拖拽功能通常涉及到对`QGraphicsRectItem`的拖动事件处理。以下是基本步骤: 首先,你需要在ROI item上连接`mouseMoveEvent`和`mouseReleaseEvent`来跟踪鼠标的移动和释放: ```cpp void MyWindow::dragStart(QGraphicsSceneMouseEvent *event) { if (event->button() == Qt::LeftButton && event->modifiers().testFlag(Qt::ControlModifier)) { m_previousPos = event->scenePos(); connect(m_roiItem, &QGraphicsRectItem::mouseMove, this, &MyWindow::dragMove); connect(view, &QGraphicsView::mouseRelease, this, &MyWindow::dragEnd); } } void MyWindow::dragMove(QGraphicsSceneMouseEvent *event) { QRectF oldRect = m_roiItem->rect(); m_roiItem->setRect(oldRect.translated(event->scenePos() - m_previousPos)); emit roiUpdated(m_roiItem->rect()); } void MyWindow::dragEnd(QGraphicsSceneMouseEvent *) { disconnect(m_roiItem, &QGraphicsRectItem::mouseMove, this, &MyWindow::dragMove); disconnect(view, &QGraphicsView::mouseRelease, this, &MyWindow::dragEnd); } ``` 这里,`dragStart`函数初始化了拖动开始时的位置,并设置了监听鼠标移动和释放的连接。`dragMove`处理鼠标移动事件,计算新位置并更新ROI。最后,在`dragEnd`中断开之前的连接,结束拖动。 为了调用上述方法,你需要在`QGraphicsScene`的相应事件处理器中调用它们: ```cpp void QGraphicsScene::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { QWidget *widget = widgetAt(event->scenePos()); // 查找目标窗口 if (widget && dynamic_cast<MyWindow*>(widget)) // 检查是否是我们窗口 { ((MyWindow*)widget)->dragMove(event); } else { QGraphicsScene::mouseMoveEvent(event); } } void QGraphicsScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { QWidget *widget = widgetAt(event->scenePos()); // 同样检查窗口 if (widget && dynamic_cast<MyWindow*>(widget)) { ((MyWindow*)widget)->dragEnd(); } else { QGraphicsScene::mouseReleaseEvent(event); } } ``` 现在,当你在ROI上按下并拖动鼠标时,ROI将会随着鼠标移动而动态调整大小和位置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值