c++ vector数组存放元素为char数组 如何向vector数组中添加元素 使char数组元素顺序不变
时间: 2023-12-23 07:05:15 浏览: 283
如果要向一个存放 char 数组的 vector 中添加一个新的元素,并且保持 char 数组中元素的顺序不变,你可以使用以下代码:
```c++
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int main()
{
// 定义 vector 存放 char 数组
vector<char*> v;
// 定义一个新的 char 数组
char str[] = "hello world";
// 在 vector 末尾添加一个新的 char 数组
v.push_back(strdup(str));
// 输出 vector 中的元素
for (int i = 0; i < v.size(); i++) {
cout << v[i] << endl;
}
return 0;
}
```
这里使用了 `strdup()` 函数,它会为新的 char 数组在堆上分配内存,并将原来的字符串复制到新的内存空间中。这样做的好处是,如果你在程序中修改了原来的字符串,新的 char 数组不会受到影响。
相关问题
c++ 使用迭代器遍历 vector数组中的 char数组 并取出每一个char数组的值
可以使用如下代码来实现:
```c++
#include <iostream>
#include <vector>
int main() {
std::vector<char*> charVector{"hello", "world", "!"};
for (auto it = charVector.begin(); it != charVector.end(); ++it) {
char* currentChar = *it;
for (int i = 0; currentChar[i] != '\0'; ++i) {
std::cout << currentChar[i] << " ";
}
std::cout << std::endl;
}
return 0;
}
```
在这个例子中,我们创建了一个 `std::vector<char*>`,其中每个元素都是一个 char 指针(即一个 char 数组)。然后我们使用迭代器 `it` 遍历这个 vector,每次取出一个 char 指针,并使用一个 `for` 循环遍历这个 char 数组中的每个 char,直到遇到 `\0` 结束符。最后,我们输出每个 char 的值并换行。
用C++实现Polyhedron类模板:(1)通过一个vector数组vector<Point<T> *> vertices;记录所有的Point顶点 (2)通过另一个vector数组vector<Facet<T> *> facets;记录所有的Facet面片 (3)每个顶点和每个面片都是一个在堆上new出来的指针 (4)只有一个构造函数Polyhedron(const char *path),参数是const char *类型,传递的是目标OFF文件的地址 每读一个顶点就new一个Point然后保存到对应的顶点vector数组里面, 顶点读完之后再读取面片 根据每个面片包含哪些顶点的信息以及上面读取顶点得到的vector数组,就可以得到对应的Point指针,然后加入到Facet的顶点列表中
好的,我来给您提供一个Polyhedron类模板的实现,如下所示:
```cpp
#include <vector>
#include <fstream>
#include <sstream>
#include <iostream>
template <typename T>
struct Point {
T x, y, z;
};
template <typename T>
struct Facet {
std::vector<Point<T> *> vertices;
};
template <typename T>
class Polyhedron {
public:
Polyhedron(const char *path) {
std::ifstream off_file(path);
if (!off_file) {
std::cerr << "Failed to open file: " << path << std::endl;
return;
}
std::string line;
std::getline(off_file, line); // OFF
std::getline(off_file, line); // num_vertices num_faces num_edges
std::istringstream iss(line);
int num_vertices, num_faces, num_edges;
iss >> num_vertices >> num_faces >> num_edges;
for (int i = 0; i < num_vertices; ++i) {
std::getline(off_file, line);
std::istringstream iss(line);
Point<T> *p = new Point<T>();
iss >> p->x >> p->y >> p->z;
vertices.push_back(p);
}
for (int i = 0; i < num_faces; ++i) {
std::getline(off_file, line);
std::istringstream iss(line);
Facet<T> *f = new Facet<T>();
int num_vertices_per_face;
iss >> num_vertices_per_face;
for (int j = 0; j < num_vertices_per_face; ++j) {
int vertex_index;
iss >> vertex_index;
f->vertices.push_back(vertices[vertex_index]);
}
facets.push_back(f);
}
}
~Polyhedron() {
for (auto p : vertices) {
delete p;
}
for (auto f : facets) {
delete f;
}
}
private:
std::vector<Point<T> *> vertices;
std::vector<Facet<T> *> facets;
};
```
这个模板类实现了记录顶点和面片的vector数组,并在构造函数中通过读取OFF文件的方式来实例化这些顶点和面片。每个顶点和面片都是一个在堆上new出来的指针,析构函数中会释放这些指针。
阅读全文