c++ 分割一个列表,取前20项放到一个新的列表中
时间: 2024-02-20 16:02:38 浏览: 103
可以使用 STL 中的 `std::vector` 来实现。假设原列表为 `std::vector<int> oldList`,新列表为 `std::vector<int> newList`,可以按如下方式实现:
```c++
// 按要求分割列表
if (oldList.size() > 20) {
std::vector<int>::const_iterator first = oldList.begin();
std::vector<int>::const_iterator last = oldList.begin() + 20;
std::vector<int> subList(first, last);
// 将前20项放入新列表中
newList = subList;
} else {
newList = oldList;
}
```
首先判断原列表的大小是否大于 20,如果是,则使用 STL 中的 `std::vector` 的迭代器分割出前 20 项,存储到临时的 `std::vector<int>` 中。然后将临时的列表赋值给新列表。如果原列表大小小于等于 20,则直接将原列表赋值给新列表即可。
相关问题
c++定义string str=“123Aab”,如何分割成单个的字符并放到容器里
可以使用STL中的容器`vector<char>`来存储分割后的字符。具体实现如下:
```c++
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main() {
string str = "123Aab";
vector<char> vec;
// 将字符串中的字符逐个加入vector中
for (int i = 0; i < str.size(); i++) {
vec.push_back(str[i]);
}
// 输出vector中的字符
for (int i = 0; i < vec.size(); i++) {
cout << vec[i] << " ";
}
return 0;
}
```
输出结果为:
```
1 2 3 A a b
```
注意,这种方法会将字符串中的所有字符都逐个存储到vector中,包括数字、字母和其他特殊字符。如果需要过滤掉不需要的字符,可以在加入vector前进行判断或过滤。
tnn c++分割图像的神经网络代码
以下是一个使用 TNN 框架和 OpenCV 库实现的 C++ 代码示例,用于将输入的图像按照指定的方式进行分割:
```cpp
#include <iostream>
#include <string>
#include <vector>
#include <opencv2/opencv.hpp>
#include "tnn/core/macro.h"
#include "tnn/core/context.h"
#include "tnn/device/cpu/cpu_device.h"
#include "tnn/interpreter/tnn/tnn_interpreter.h"
#include "tnn/utils/mat_utils.h"
using namespace std;
using namespace cv;
using namespace TNN_NS;
int main() {
// 加载模型和配置文件
TNN_NS::ModelConfig config;
config.model_type = TNN_NS::MODEL_TYPE_TNN;
config.params.push_back("model.tnnproto");
config.params.push_back("model.tnnmodel");
TNN_NS::TNN_Interpeter interpreter;
TNN_NS::Status status = interpreter.Init(config);
if (status != TNN_NS::TNN_OK) {
std::cerr << "Error: Init TNN Interpreter failed: " << status.description() << endl;
return -1;
}
// 创建 CPU 上下文
TNN_NS::CPUDevice cpu_device;
TNN_NS::Context context;
context.device_list.push_back(&cpu_device);
context.memory_type = TNN_NS::DEVICE_MEMORY_TYPE_AUTO;
// 加载输入图像
Mat input_image = imread("input.jpg");
if (input_image.empty()) {
std::cerr << "Error: Load input image failed" << endl;
return -1;
}
// 预处理输入图像
Mat input_mat;
input_image.convertTo(input_mat, CV_32FC3);
cv::cvtColor(input_mat, input_mat, cv::COLOR_BGR2RGB);
auto input_dims = interpreter.GetInputShape(0);
input_dims[0] = 1;
TNN_NS::MatUtils::ConvertCVMatToTNNMat(input_mat, interpreter.GetInputMat(0));
// 运行神经网络
status = interpreter.Interpret(&context);
if (status != TNN_NS::TNN_OK) {
std::cerr << "Error: Run TNN Interpreter failed: " << status.description() << endl;
return -1;
}
// 获取分割结果
TNN_NS::Mat output_mat;
status = interpreter.GetOutputMat(output_mat, 0);
if (status != TNN_NS::TNN_OK) {
std::cerr << "Error: Get TNN output failed: " << status.description() << endl;
return -1;
}
// 后处理分割结果
auto output_dims = output_mat.GetDims();
int num_classes = output_dims[1];
int height = output_dims[2];
int width = output_dims[3];
vector<Mat> output_images(num_classes);
for (int i = 0; i < num_classes; i++) {
output_images[i] = Mat(height, width, CV_32FC1, output_mat.GetData() + i * height * width);
output_images[i] = output_images[i] * 255;
output_images[i].convertTo(output_images[i], CV_8UC1);
}
// 保存分割结果
for (int i = 0; i < num_classes; i++) {
string output_filename = "output_" + to_string(i) + ".jpg";
imwrite(output_filename, output_images[i]);
}
return 0;
}
```
本代码使用 TNN 框架和 OpenCV 库来实现图像分割。首先,我们加载模型和配置文件,并创建一个 TNN_Interpeter 对象,以便在 CPU 上下文中运行神经网络。然后,我们加载输入图像,并使用 OpenCV 库进行预处理。在预处理过程中,我们将输入图像转换为 TNN 支持的格式,并将其设置为神经网络输入。接下来,我们调用 Interpret() 函数运行神经网络,并使用 GetOutputMat() 函数获取分割结果。最后,我们对分割结果进行后处理,并使用 imwrite() 函数将输出图像保存到文件中。
请注意,本示例仅适用于输入单个图像的情况。如果您需要处理多个图像,请将代码放入循环中,并替换 input_image 和输出路径。同时,请根据您的网络架构和数据集自定义后处理代码。
阅读全文