分析代码void dis_1(const int x){ array <int,x> myarr{1,2,3,4,5}; cout << myarr[1] << endl; } void dis_2(){ const int x = 5; array <int,x> myarr{1,2,3,4,5}; cout << myarr[1] << endl; } int main() { dis_1(5); dis_2(); }
时间: 2023-06-25 19:06:53 浏览: 81
这段代码定义了两个函数`dis_1`和`dis_2`,以及一个`main`函数。两个`dis`函数的作用是印出一个数组中下标为1的元的值。不同的是,`dis_1`函数的参数是一个整数`x`,用来定义数组的大小;而`dis_2`函数中的数组大小是通过常量`x`定义的。
在`main`函数中,分别调用了`dis_1(5)`和`dis_2()`,结果输出的都是数组中下标为1的元素的值。其中,`dis_1(5)`中的`5`作为参数传递给`x`,用来定义数组的大小为5;`dis_2()`中的`x`定义为常量`5`,用来定义数组的大小为5。
需要注意的是,`array`是C++11中新增的标准库类型,用来表示固定大小的数组。它的定义方式为`array<类型,大小> 数组名`。在这个例子中,`array<int,x>`表示一个整型数组,大小为`x`。如果`x`不是常量,那么编译器会报错。
相关问题
vector<array<int, 3> > vector;如何通过cin给vector变量赋值
可以使用 `std::cin` 和嵌套的循环语句来为 `std::vector<std::array<int, 3>>` 类型的变量赋值。
以下是一个示例代码,可以从标准输入流中读取多行数据,每行包含三个整数,将它们存储到一个 `std::vector<std::array<int, 3>>` 类型的变量中:
```
#include <iostream>
#include <vector>
#include <array>
int main() {
std::vector<std::array<int, 3>> vec;
int n; // 数据行数
std::cin >> n;
for (int i = 0; i < n; ++i) {
std::array<int, 3> arr;
for (int j = 0; j < 3; ++j) {
std::cin >> arr[j];
}
vec.push_back(arr);
}
// 输出 vector 中的内容
for (const auto& arr : vec) {
for (int x : arr) {
std::cout << x << " ";
}
std::cout << std::endl;
}
return 0;
}
```
以上代码首先声明了一个 `std::vector<std::array<int, 3>>` 类型的变量 `vec`,并从标准输入流中读取一个整数 `n`,表示数据行数。然后使用嵌套的 for 循环,逐行读取三个整数,并将它们存储到一个 `std::array<int, 3>` 类型的数组中,最后将该数组添加到 `vec` 中。
最后,使用两个嵌套的循环语句遍历 `vec` 中的元素,并将它们依次输出到标准输出流中。
优化这段代码template<typename T> class MyTemplateClass:public QObject { Q_OBJECT public: MyTemplateClass(const T& data) : m_data(data) { qRegisterMetaType<SP104>("SP104"); qRegisterMetaType<DP104>("DP104"); qRegisterMetaType<SP104_T>("SP104_T"); qRegisterMetaType<DP104_T>("DP104_T"); qRegisterMetaType<ME_NA104>("ME_NA104"); qRegisterMetaType<ME_NB104>("ME_NB104"); qRegisterMetaType<ME_NC104>("ME_NC104"); qRegisterMetaType<YK_SP104>("YK_SP104"); qRegisterMetaType<YK_DP104>("YK_DP104"); t_cache.setMaxCost(MAP_MAX); } QMap<QString,QVector<T>>t_map; QMap<QString,QVector<T>>old_map; QCache<QString,QVector<T>>t_cache; QVector<T>t_vctor; QDateTime start_time; int state_flg; int expect_timedif; void set_firstaddr(int yxaddr,int ycaddr) { m_yxAddr = static_cast<int32_t>(yxaddr); m_ycAddr= static_cast<int32_t>(ycaddr); } int32_t m_yxAddr; int32_t m_ycAddr; void set_flg(int flg) { state_flg=flg; } int get_flg() { return state_flg; } void set_expect_time(int time) { expect_timedif=time; } float GetByteToFloat(BYTE data[4]) { FloatLongType value; value.ldata = data[0] | (data[1] << 8) | (data[2] << 16) | (data[3] << 24); return value.fdata; } QDateTime CP56TiToQDateTi(CP56Time time) { int MillSecond = (time.wMilliSeconds[1] << 8) + time.wMilliSeconds[0]; QTime sTime(time.byHours, time.byMinutes, MillSecond / 1000, MillSecond % 1000); QDate sDate(time.byYears + 2000, time.byMonths, time.byDays); return QDateTime(sDate, sTime); } signals: void data_fit(int flg,QString name); private: T m_data; };
这段代码可以进行如下的优化:
1. 将一些注册元类型的操作放在类的构造函数外部进行,以减少每次创建类对象时的重复操作。
2. 将一些不常用的操作(如 GetByteToFloat 和 CP56TiToQDateTi 函数)移出类的定义,以减小类的体积和提高代码的可读性。
3. 将一些变量的初始化操作放在类的构造函数初始化列表中,以提高代码的效率。
下面是优化后的代码:
```
template<typename T>
class MyTemplateClass: public QObject
{
Q_OBJECT
public:
MyTemplateClass(const T& data) :
QObject(nullptr),
m_data(data),
t_cache(MAP_MAX),
state_flg(0),
expect_timedif(0)
{
qRegisterMetaType<SP104>("SP104");
qRegisterMetaType<DP104>("DP104");
qRegisterMetaType<SP104_T>("SP104_T");
qRegisterMetaType<DP104_T>("DP104_T");
qRegisterMetaType<ME_NA104>("ME_NA104");
qRegisterMetaType<ME_NB104>("ME_NB104");
qRegisterMetaType<ME_NC104>("ME_NC104");
qRegisterMetaType<YK_SP104>("YK_SP104");
qRegisterMetaType<YK_DP104>("YK_DP104");
}
QMap<QString,QVector<T>> t_map;
QMap<QString,QVector<T>> old_map;
QCache<QString,QVector<T>> t_cache;
QVector<T> t_vctor;
QDateTime start_time;
int state_flg;
int expect_timedif;
void set_firstaddr(int yxaddr,int ycaddr)
{
m_yxAddr = static_cast<int32_t>(yxaddr);
m_ycAddr= static_cast<int32_t>(ycaddr);
}
int32_t m_yxAddr;
int32_t m_ycAddr;
void set_flg(int flg)
{
state_flg=flg;
}
int get_flg()
{
return state_flg;
}
void set_expect_time(int time)
{
expect_timedif=time;
}
signals:
void data_fit(int flg,QString name);
private:
T m_data;
};
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)