c++ - 在公共(public)成员函数调用中引用私有(private)成员变量的更安全方法?

标签 c++ class stdvector

<分区>

我想使用单个函数与多个私有(private)成员变量进行交互。我想出了:

class Some_Vectors {

public:
  int is_value_in_vector(string vector_name, int value);
  void append_value_to_vector(string vector_name, int value)

private:
  vector<int> A;
  vector<int> B;

};


// returns value's index if it's there, -1 if not
int Some_Vectors::is_value_in_vector(string vector_name, int value) {

  vector<int> *selected_vector;

  if (vector_name == "A") {selected_vector = &A;}
  else if (vector_name == "B") {selected_vector = &B;}

  for (int i = 0; i < selected_vector->size(); i++){
    if (selected_vector[0][i] == value){
      return i;
    }
  }
  return -1;
}

它有效,但我觉得比较这样的字符串不安全/脆弱。有没有办法在函数调用中专门引用一个私有(private)变量?

编辑为(希望)不那么主观的问题。我最终采用了 RichardCritten 关于调用单个私有(private)函数的多个公共(public)函数的建议。

最佳答案

您可以使用 unordered_map 来实现您的需求,如下所示。

  1. 如下声明 unordered_map

    unordered_map<string, vector<int>> umap;
    
  2. 使用 [] 运算符插入要映射的值。

    umap["A"] = {10,20}; 
    umap["B"] = {30,40};
    
  3. 使用 find 函数在 unordered_map 中搜索键值,如下所示。

    string vector_name = "A";
    
    vector_name = "A";
    
    
    auto it = umap.find(vector_name);
    if (it == umap.end())
        return -1;
    
  4. 在 map 中找到 key,value 对后,在 vector 中搜索特定的 int,如下所示。

    std::vector<int>::iterator iter = std::find(it->second.begin(), it->second.end(), 20);
    
  5. 如果 iter 没有指向 vector 端,则返回 intvector< 中的确切位置如下。

    if ( iter !=  it->second.end())
        return std::distance(it->second.begin(),iter);
    else
        return -1;
    

您的完整示例代码可能如下所示。

int main() 
{ 

    unordered_map<string, vector<int>> umap; 

    // inserting values by using [] operator 
    umap["A"] = {10,20}; 
    umap["B"] = {30,40}; 


    string vector_name = "A"; 

    vector_name = "A"; 


    auto it = umap.find(vector_name);
    if (it == umap.end())
    return -1;

    std::vector<int>::iterator iter = std::find(it->second.begin(), it->second.end(), 20);

    if ( iter !=  it->second.end())
     return std::distance(it->second.begin(),iter);
    else
    return -1;

} 

关于c++ - 在公共(public)成员函数调用中引用私有(private)成员变量的更安全方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52348741/

相关文章:

c++ - 异常处理+多态,如果异常方法不起作用,在同一个类中不起作用

c++ - cmake、conan 和 qt hello world 项目构建错误

c++ - 没有lmdb的Caffe+Opencv

c++ - 如何从构造函数中确定类的内存分配地址?

java - 在 JDBC 中使用 class.forName

c++ - 使用指向 vector 中项目的指针,并从 vector 中删除项目

c++ - 没有成员使用gcc和clang在 'str'中名为 'std::basic_ostream<char>'的成员,但是msvc没问题

C++ 无法直接调用构造函数 ' '

c++ - 移动指定索引处的数组元素

c++ - 在移出 vector 上调用 size() 方法是否安全?