如何永久删除向量的成员?

时间:2015-06-17 00:33:36

标签: c++ vector

请允许我说明我的意思。说我有以下代码:

#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。我是一名初学程序员,如果这个解释不清楚,那就很抱歉。

2 个答案:

答案 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>的起始编号的值可能不值得。