从标准输入中读取数据到vector中
时间: 2023-05-20 10:05:05 浏览: 110
可以使用以下代码从标准输入中读取数据到vector中:
```c++
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
int n;
while (cin >> n) {
v.push_back(n);
}
return 0;
}
```
这段代码会不断从标准输入中读取整数,并将它们添加到vector中,直到遇到输入结束符(比如Ctrl+D)。
相关问题
编写函数,返回一个动态分配的vector<int>;将此vector传递给另一个函数,此函数从标准输入中读取数据,保存在vector中;再将此vector传递给另外一个函数,输出所有值到标准输出。要求传递参数时使用智能指针,不能使用内置指针、简单引用及new/delete运算符。
在C++中,你可以使用`std::shared_ptr`作为智能指针来管理动态分配的数据,特别是像`std::vector`这样的资源。这里是一个简单的示例:
```cpp
#include <iostream>
#include <vector>
#include <memory>
#include <sstream>
// 函数一:创建并返回智能指针指向的vector
std::shared_ptr<std::vector<int>> create_vector() {
std::vector<int> vec;
// 想要在vector中添加元素,可以在这里操作
return std::make_shared<std::vector<int>>(vec);
}
// 函数二:从标准输入读取数据,并更新智能指针指向的vector
void read_data(std::shared_ptr<std::vector<int>>& vec) {
int value;
while (std::cin >> value) {
vec->push_back(value); // 使用*运算符访问实际vector
}
}
// 函数三:输出智能指针指向的所有值
void print_values(const std::shared_ptr<std::vector<int>>& vec) {
for (const auto& val : *vec) { // 使用*运算符解引用获取vector内容
std::cout << val << " ";
}
std::cout << std::endl;
}
int main() {
std::shared_ptr<std::vector<int>> my_vec = create_vector();
read_data(my_vec);
print_values(my_vec);
return 0;
}
```
在这个例子中,我们通过`std::make_shared`来创建一个智能指针,它自动管理了内存分配和释放。`read_data`函数接收一个`std::shared_ptr`作为参数,然后在其内部直接修改共享的vector。`print_values`函数同样使用了解引用`*`来访问vector的内容。
C++如何读取二进制文件中的数据到vector中
您可以使用C++的文件输入流(ifstream)和vector的insert函数来读取二进制文件中的数据到vector中。下面是一个示例代码:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
int main() {
std::ifstream file("binary_file.bin", std::ios::binary);
if (!file) {
std::cerr << "Failed to open the file." << std::endl;
return 1;
}
// 获取文件大小
file.seekg(0, std::ios::end);
std::streampos fileSize = file.tellg();
file.seekg(0, std::ios::beg);
// 根据文件大小调整vector的大小
std::vector<char> buffer(fileSize);
// 读取文件数据到vector中
file.read(buffer.data(), fileSize);
// 关闭文件
file.close();
// 检查是否成功读取文件数据
if (!file) {
std::cerr << "Failed to read data from the file." << std::endl;
return 1;
}
// 将数据存储在vector中
std::vector<char> data(buffer.begin(), buffer.end());
// 打印vector中的数据
for (const auto& element : data) {
std::cout << element << " ";
}
std::cout << std::endl;
return 0;
}
```
在上述示例代码中,我们首先打开一个二进制文件,并检查是否成功打开。然后,我们使用文件流的seekg函数获取文件大小,并根据文件大小调整vector的大小。接下来,我们使用文件流的read函数将文件数据读取到vector中。最后,我们检查是否成功读取数据,并将数据存储在另一个vector中。您可以根据需要修改代码来适应您的具体情况。
阅读全文