vector1 8.15

// vector1 stl 8.15.cpp : 此文件包含 “main” 函数。程序执行将在此处开始并结束。
//

//#include
//
//int main()
//{
// std::cout << “Hello World!\n”;
//}

// 运行程序: Ctrl + F5 或调试 >“开始执行(不调试)”菜单
// 调试程序: F5 或调试 >“开始调试”菜单

// 入门使用技巧:
// 1. 使用解决方案资源管理器窗口添加/管理文件
// 2. 使用团队资源管理器窗口连接到源代码管理
// 3. 使用输出窗口查看生成输出和其他消息
// 4. 使用错误列表窗口查看错误
// 5. 转到“项目”>“添加新项”以创建新的代码文件,或转到“项目”>“添加现有项”以将现有代码文件添加到项目
// 6. 将来,若要再次打开此项目,请转到“文件”>“打开”>“项目”并选择 .sln 文件
//#include
//#include
//using namespace std;
//int main()
//{
// // constructors used in the same order as described above:
// vector first; // empty vector of ints
// vector second(4, 100); // four ints with value 100
// vector third(second.begin(), second.end()); // iterating through second
// vector fourth(third); // a copy of third
// // 下面涉及迭代器初始化的部分,我们学习完迭代器再来看这部分
// // the iterator constructor can also be used to construct from arrays:
// int myints[] = { 16,2,77,29 };
// vector fifth(myints, myints + sizeof(myints) / sizeof(int));
// cout << “The contents of fifth are:”;
// for (std::vector::iterator it = fifth.begin(); it != fifth.end(); ++it)
// cout << ’ ’ << *it;
// cout << ‘\n’;
// return 0;
//}
//迭代器的获取
//#include
//#include
//using namespace std;
//int main()
//{
// //容器创建一个新的空的,这里使用的是默认的拷贝构造。
// vector myvector;
// //使用的是尾插进行的操作。直接使用的是现成的接口。
// for (int i = 1; i <= 5; i++)
// {
// myvector.push_back(i);
// }
// cout << “myvector contains:”;
// //迭代器的获取,注意书写的形式。
// for (vector::iterator it = myvector.begin(); it != myvector.end(); ++it)
// {
// //这里是非const类型的操作,就是可以对齐进行内容的修改。
// //*it = 1;
// cout << ’ ’ << *it;
// }
// // cout << ’ ’ << *it;
// cout << ‘\n’;
// return 0;
//}

//#include
//#include
//
//int main()
//{
// std::vector myvector;
// int sum(0);
// for (int i = 1; i <= 10; i++) myvector.push_back(i);
// while (!myvector.empty())
// {
// //这里是表示的是每次从最后一个位置加,加完之后删除。
// sum += myvector.back();
// myvector.pop_back();
// }
// std::cout << "total: " << sum << ‘\n’;
// return 0;
//}

//#include
//#include
//using namespace std;
////const 对象的输出打印。
//void PrintVector(const vector& v)
//{
// // const对象使用const迭代器进行遍历打印
// vector::const_iterator it = v.begin();
// while (it != v.end())
// {
// cout << *it << " ";
// ++it;
// }
// cout << endl;
//}
//int main()
//{
// // 使用push_back插入4个数据
// vector v;
// v.push_back(1);
// v.push_back(2);
// v.push_back(3);
// v.push_back(4);
// // 使用迭代器进行遍历打印
// vector::iterator it = v.begin();
// while (it != v.end())
// {
// cout << *it << " ";
// ++it;
// }
// cout << endl;
// // 使用迭代器进行修改
// it = v.begin();
// while (it != v.end())
// {
// *it *= 2;
// ++it;
// }
// // 使用反向迭代器进行遍历再打印
// vector::reverse_iterator rit = v.rbegin();
// while (rit != v.rend())
// {
// cout << *rit << " ";
// ++rit;
// }
// cout << endl;
// PrintVector(v);
// return 0;
//}

#include
#include
using namespace std;
//assign 赋值的内容
vector v;
void test()
{
vector v(3,2);
//赋值
v.assign(5,1);
printF(v);
vector v2(3, 6);
v.assign(v2.begin(), v2.end());
printF(v);
int arr[] = { 1,2,3,4 };
v.assign(arr, arr + sizeof(arr) / sizeof(arr[0]));
printF(v);
//未删
popback();

//插入的操作
v.insert(v.begin(), 0);

//删除
//删除 一个字符
//删除一个区间  左闭右开

//emplace 这里也是插入的操作,但是区别就是可以自己创建一个对象。
//优势主要是体现在自定义的类型
//emplace与insert的区别

//swap  交换相同的类型
vector<A> v3;
v3.swap(v2);
swap(v3, v2);
//清空的操作
v2.clear();

}

//迭代器失效的操作
//迭代器失效的场景 使空间发生变化的,都有可能使我们的迭代器失效。
//失效的原因就是因为,当空间发生变化的时候,迭代器的指向发生了变化,就是可能丢弃之前的空间,而指向新的空间
//1.迭代器指向的位置无效,空间释放(非法访问)
//2.指向发生了变化(错位)
//3.空间发生变化或者删除,都会引起迭代器的失效
void test1()
{
vector v(3, 0);
vector::iterator it = v.begin();
cout << *it << endl;
v.resize(30, 1);
v.reserve(30);
v.insert(v.begin(), 1);
v.push_back(2);
v.emplace(v.begin(), 3);
v.erase(it);
//解决方式:重新获取迭代器
it = v.begin();
cout << *it << endl;

}

//
void test()
{
vector v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);

vector<int>::iterator it = v.begin();
while (it != v.end())
{
	if (*it % 2 == 0)
		v.erase(it);
	++it;
}

}

//题目. 只出现一次的数字
class Solution {
public:
int singleNumber(vector& nums)
{
int value = 0;
for (auto e : v)
{
value ^= e;
}
return value;
}
};
//杨辉三角
// 涉及resize / operator[]
class Solution {
public:
// 核心思想:找出杨辉三角的规律,发现每一行头尾都是1,中间第[j]个数等于上一行[j-1]+[j]
//首先是开行
vector<vector> generate(int numRows)
{
//再就是列的空间的开辟。
vector<vector> vv;
// 先开辟杨辉三角的空间
vv.resize(numRows);
for (size_t i = 1; i <= numRows; ++i)
{
vv[i - 1].resize(i, 0);
// 每一行的第一个和最后一个都是1
vv[i - 1][0] = 1;
vv[i - 1][i - 1] = 1;
}
for (size_t i = 0; i < vv.size(); ++i)
{
for (size_t j = 0; j < vv[i].size(); ++j)
{
if (vv[i][j] == 0)
{
vv[i][j] = vv[i - 1][j - 1] + vv[i - 1][j];
}
}
}
return vv;
}
};
//周老师
vector<vector> generate(int numRows)
//创建行 行数是题目给出的。
vector<vector> mat(numRows);
//创建列
for (int i = 0; i < numRows; ++i)
{
mat[i].resize(i + 1);
}
for (int i = 0; i < numRows; ++i)
{
//第一行和第一列为1
mat[i][0] = mat[i][i] = 1;
for (int j = 1; j < i; ++j)
{
mat[i][j] = mat[i - 1][j] + mat[i - 1][j - 1];

}
return mat;

}

关于 Proteus 8.15 中数码管的技术资料和驱动程序的信息,以下是详细的说明: ### 关于 Proteus 8.15 数码管的支持 Proteus 是一款广泛应用于电子电路设计与仿真的软件工具。在 Proteus 8.15 版本中,数码管作为常见的显示元件被支持,并提供了多种仿真模型供用户选择。这些模型涵盖了七段数码管、十六段数码管以及其他变体。 #### 驱动程序实现方式 对于数码管的驱动,在 Proteus 中通常通过设置其连接到微控制器(MCU)或其他逻辑器件来完成控制功能。具体来说,开发者可以通过以下方法实现对数码管的驱动[^1]: - **硬件接口配置**: 将数码管的各段引脚分别连接至 MCU 的 GPIO 引脚上。 - **固件编程**: 编写相应的嵌入式代码以定义如何点亮特定的段组合形成所需字符或数字。例如,利用 C 或汇编语言编写针对不同数值对应的二进制模式输出给定数据流。 下面是一个简单的例子展示如何用 Arduino 控制单个共阳极型七段数码管: ```cpp const int segmentsPins[] = {2, 3, 4, 5}; // 定义用于控制各个LED段的GPIO编号数组 void setup() { for (int i=0;i<sizeof(segmentsPins)/sizeof(int);++i){ pinMode(segmentsPins[i], OUTPUT); } } void loop(){ displayNumber(6); delay(1000); clearDisplay();delay(1000); } // 函数:显示指定数字 void displayNumber(byte num){ byte pattern[]={B0000,B0001,...};//预设好每一位数对应的状态字节串列 digitalWriteAll(pattern[num]); } // 清除屏幕函数 void clearDisplay(){digitalWriteAll(B000);} // 辅助宏定义批量操作多个端口状态 #define digitalWriteAll(value)\ do{for(auto pin :segmentsPins){digitalWrite(pin,(value>>(pin-segmentsPins[0]))&1?HIGH:LOW);}}while(false) ``` 上述代码片段展示了基本原理——即通过调整每一段 LED 的开关状态达到呈现目标数字的效果。实际应用可能还需要考虑动态扫描技术提高效率以及减少功耗等问题。 #### 技术文档获取途径 如果需要更加详尽的技术参数或者高级特性指导,则建议访问 Labcenter Electronics 官方网站下载最新版的手册文件[^2]。此外也可以查阅如下资源获得帮助: - 官方论坛讨论区; - YouTube 上由经验丰富的工程师分享的教学视频; - GitHub 平台上的开源项目实例;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值