代码之家  ›  专栏  ›  技术社区  ›  kaytu

push_back()后向量大小发生变化

  •  0
  • kaytu  · 技术社区  · 2 年前

    我不知道为什么 .size() vector<string> (10) 以下是从10改为20后 .push_back(string) 在上面。我认为应该保持不变。

    int main() {
    
       vector<string> StrVec(10);
       vector<int>     intVec(10);
       iota(intVec.begin(), intVec.end(), 1);
    
       cout << "StrVec.length = " << StrVec.size() << endl;
    
       for (int i : intVec)
       {
           StrVec.push_back(to_string(i));
       }
    
       cout << "StrVec.length = " << StrVec.size() << endl;
    
       return 0;
    }
    

    输出:

    StrVec.length = 10
    StrVec.length = 20
    
    1 回复  |  直到 2 年前
        1
  •  3
  •   Remy Lebeau    2 年前

    当你写作时 vector<string> StrVec(10); StrVec 初始化10个默认值 string 元素。然后,每个 push_back() 将新元素推送到 StrVec公司 迭代时 intVec 从而得出20个元素。

    如果您只想预分配内存(但没有任何元素),您可以考虑改用它:

    vector<string> StrVec;
    StrVec.reserve(10);
    

    如果要访问已分配向量的元素,可以使用 StrVec[i] 哪里 i 是索引。请注意,索引可能不会超过向量的末尾。