请允许我说明我的意思。说我有以下代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector <int> ints;
ints.push_back(1);
ints.push_back(2);
ints.push_back(3);
for(int i=0;i<ints.size();i++) {
cout << ints[i] << endl;
}
cout << endl;
ints.erase(ints.begin());
for(int i=0;i<ints.size();i++) {
cout << ints[i] << endl;
}
return 0;
}
我可以做些什么来使这个程序的版本在1
首次运行后已被删除?基本上在运行它一定次数后基本上删除了向量的每个元素之前,基本上将2
作为第二次运行时向量的开头,然后是3
。我是一名初学程序员,如果这个解释不清楚,那就很抱歉。
答案 0 :(得分:2)
使用文件。您可以从文件加载向量的内容,将其打印出来,擦除第一个元素,然后将向量的内容写回文件。如果打开文件进行读取失败,您可以假设这是程序第一次运行,并使用初始值填充向量。
#include <fstream>
#include <iostream>
#include <vector>
std::vector<int> load(char const* filename)
{
// try to open the file for reading
std::ifstream fin(filename);
// couldn't open the file, so generate initial content
if (!fin) {
return { 1, 2, 3 };
}
// read the contents of the file into a vector, then return it
int x;
std::vector<int> v;
while (fin >> x)
v.push_back(x);
return v;
}
void save(char const* filename, std::vector<int> const& v)
{
std::ofstream fout(filename);
// put a '\n' between each number so that distinct numbers aren't
// concatenated together. e.g. Three seperate numbers 1, 2 and 3
// aren't combined to become a single number, 123
for (auto x : v)
fout << x << '\n';
}
int main(int argc, char* argv[])
{
char const* filename = "something";
auto v = load(filename);
for (auto x : v)
std::cout << x << '\n';
if (!v.empty())
v.erase(v.begin());
save(filename, v);
}
答案 1 :(得分:0)
您有几个选择:
在运行时重写代码。这太疯狂了。更改已编译程序的二进制文件并不容易。
将矢量存储在外部文件中。您可以使用std::cin
和一些分隔符进行一些基本的解析;试试这个例子,在这里:http://coliru.stacked-crooked.com/a/9a4d7a1a3f525b7e
我真的想不到更多。但是每次运行时重写程序本身并不是C ++中通常不允许的 - 做这样的事情更像是病毒或即时编译器的行为,这两者都需要对安全性采取自由行动对于系统来说,每次程序运行时只更改std::vector<int>
的起始编号的值可能不值得。